Accanto a ncoghlan sono l'altro manutentore del sistema di importazione di Python e l'autore della sua attuale implementazione, importlib (http://docs.python.org/dev/py3k/library/importlib.html). Tutto ciò che Nick ha detto sono d'accordo, quindi voglio solo aggiungere alcune informazioni extra.
Innanzitutto, non fare troppo affidamento su PEP 302 direttamente, ma guarda invece cosa fornisce importlib in termini di classi di base astratte, ecc. Per la retrocompatibilità le cose dovevano essere compatibili con PEP 302, ma ho dovuto aggiungere alcune delle mie proprie API al fine di completare il supporto per una vera flessibilità.
Un altro punto importante è che stai dando agli sviluppatori due flessibilità. Uno è la possibilità di archiviare il codice in un modo diverso dal solo direttamente sul file system come singoli file (io chiamo questo back-end di archiviazione per le importazioni), ad esempio questo consente al codice di vivere in un file zip, database sqlite, ecc. L'altro supporto è nel consentire il controllo del codice pre o post-elaborazione in qualche modo, ad esempio Chisciotte (https://www.mems-exchange.org/software/quixote/) e il suo uso alternativo di letterali stringa non assegnati a una variabile sarebbe molto più semplice da supportare.
Mentre il secondo è raramente necessario, il primo è dove devi preoccuparti del supporto. Ed è qui che finisci per ridefinire praticamente le API di interazione del file system. Poiché alcune persone hanno bisogno di risorse archiviate come file con il loro codice, è necessario fornire un buon modo per leggere file, scoprire file, ecc. Dobbiamo ancora implementare la parte dell'API per scoprire quali file di dati sono disponibili, elencarli, ecc. .
Ma poi hai anche la necessità di API che siano specifiche del codice. Come accennato da Nick, alla fine hai bisogno di API per scoprire quali moduli contiene un pacchetto, ecc. Che non sono specifici del file. C'è questa strana dualità di avere API per gestire i moduli in cui hai estratto il concetto di file, ma alla fine hai bisogno di fornire API per accedere a dati di risorse simili a file. E non appena si tenta di implementare l'uno rispetto all'altro per evitare la duplicazione, le acque diventano davvero torbide (cioè le persone finiscono per fare affidamento sulla strutturazione del percorso del file prevista, ecc. Senza prestare attenzione al fatto che il percorso potrebbe non essere un vero percorso perché è per un file zip contenente codice e non solo un file). IOW finirai per dover implementare due API simili, ma a lungo andare starai meglio.
Come ha detto Nick, la nostra soluzione è un buon punto di partenza, ma non è come lo farei oggi se stessi progettando l'API da zero.