Voglio utilizzare un modulo, ad es. BeautifulSoup, nel mio codice Python, così io di solito aggiungere questo alla parte superiore del file:Importare un modulo in Python solo se non esiste già
from BeautifulSoup import BeautifulSoup
Tuttavia, quando distribuisco il modulo che sto scrivendo, gli altri non possono avere BeautifulSoup, quindi mi limiterò a includo nella mia struttura di directory in questo modo:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/19/2011 5:45 PM BeautifulSoup
-a--- 9/17/2011 8:06 PM 4212 myscript.py
Ora, il mio file myscript.py modificato sarà simile a questa in cima al riferimento alla copia locale di BeautifulSoup:
from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData
Ma cosa succede se il dev eloper che usa la mia libreria ha già installato BeautifulSoup sul loro computer? Voglio modificare myscript.py in modo che controlli per vedere se BeautifulSoup è già installato, e se è così, usa il modulo standard. Altrimenti, usa quello incluso.
Utilizzando Pseudo-python:
if fBeautifulSoupIsInstalled:
from BeautifulSoup import BeautifulSoup, CData
else:
from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData
è possibile? Se é cosi, come?
Tratto da http://effbot.org/zone/import-confusion.htm: 'Quando Python importa un modulo, prima controlla il Registro di sistema del modulo (sys.modules) a vedere se il modulo è già stato importato. In questo caso, Python utilizza l'oggetto modulo esistente così com'è. – mwan
Prova ad importarlo. Se non funziona, cattura ImportError e importa dalla tua copia locale. Assegna un nome alla tua copia locale qualcos'altro (myBeautifulSoup) in modo che non nasconda il modulo installato dall'utente. –
@mwan: Ben non ha bisogno di sapere se è già * importato *, ha bisogno di sapere se è * già nel sistema *. –