2011-01-14 20 views
9

Sto lavorando a un progetto in cui è necessario utilizzare un modulo di terze parti in diversi file di progetto (file .py). La situazione è così.python multiple importazioni per un modulo comune

Ho un file "abc.py" che importa il modulo di terze parti "common.py". Ci sono un paio di altri file che importano anche "common.py". Tutti questi file vengono importati anche nel file di progetto principale "main.py".

Sembra ridondante importare lo stesso modulo nel progetto più volte in file diversi poiché "main.py" sta anche importando tutti i file di progetto.

Non sono nemmeno sicuro di come le dimensioni del progetto vengano influenzate da più istruzioni di importazione.

Qualcuno può aiutarmi a semplificare le cose.

risposta

21

L'importazione sempre e solo carica un modulo una volta. Qualsiasi importazione successivamente aggiungerà semplicemente lo spazio dei nomi corrente.

È sufficiente importare le cose nei file necessari per renderle disponibili e lasciare che Python risolva il problema caricando i moduli.

3

Sì, hai ragione, questo comportamento esiste davvero in Python. Vale a dire, se il codice utente tenta di importare lo stesso modulo in modi diversi, per esempio - import a e import A.a (dove a.py file si trova in A pacchetto e il primo import è fatto dall'interno pacchetto A mentre l'altro import si presenta come dall'esterno).

Questo può facilmente accadere nella vita reale, in particolare per i progetti a più livelli Python.

Ho riscontrato un effetto collaterale di tale comportamento, ovvero il comando isinstance non funziona quando un oggetto viene controllato rispetto a una classe definita nel modulo che è stata importata in tale modo.

La soluzione a cui posso pensare è ridefinire la funzione __builtin__. __ import__ per eseguire il suo lavoro in modo più intelligente.