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.
Per prima cosa, non affidarti troppo direttamente a PEP 302, ma guarda a ciò che importlib fornisce in termini di classi astratte di base, ecc. Per le compatibilità con le versioni precedenti doveva essere compatibile con PEP 302, ma dovevo aggiungere alcune delle mie API per completare il supporto per una vera flessibilità.
Un altro punto importante è che stai dando agli sviluppatori due elementi di flessibilità. Uno è la possibilità di memorizzare codice in un modo diverso da quello direttamente sul file system come singoli file (io lo chiamo il back-end di storage per le importazioni), ad es. questo permette al codice di vivere in un file zip, database sqlite, ecc. L'altro supporto consiste nel consentire al controllo di pre-elaborare o post-elaborare il codice in qualche modo, ad es. Quixote (https://www.mems-exchange.org/software/quixote/) e il suo uso alternativo di stringhe letterali non assegnati a una variabile sarebbero molto più facili da supportare.
Mentre il secondo è raramente necessario, il primo è dove devi preoccuparti del supporto. Ed è qui che si finisce per ridefinire praticamente le API di interazione del file system. Poiché alcune persone necessitano di risorse archiviate come file con il loro codice, è necessario fornire un buon metodo per leggere file, scoprire file, ecc. Dobbiamo ancora implementare la parte dell'API per scoprire quali file di dati sono disponibili, elencandoli, ecc. .
Ma poi hai anche bisogno di API che siano specifiche del codice. Come menzionato da Nick, finisci per aver bisogno di API per scoprire quali moduli contiene un pacchetto, ecc. Che non sono specifici dei file. C'è questa strana dualità di avere le API per gestire i moduli in cui hai estratto il concetto di file, ma alla fine hai bisogno di fornire API per accedere ai dati delle risorse simili a file. E non appena si tenta di implementarne uno per quanto riguarda l'altro per evitare la duplicazione, le acque diventano davvero oscure (cioè le persone finiscono per fare affidamento sulla strutturazione del percorso 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 ti ritroverà a dover implementare due API simili, ma a lungo andare sarai migliore.
Come diceva Nick, la nostra soluzione è un buon punto di partenza, ma non è come lo farei oggi se stessimo progettando l'API da zero.