Chcę użyć modułu, np. BeautifulSoup, w moim kodu Pythona, więc zazwyczaj dodać to na początku pliku:Importuj moduł w Pythonie tylko wtedy, gdy jeszcze nie istnieje
from BeautifulSoup import BeautifulSoup
Jednak, kiedy rozpowszechniać moduł piszę, inni mogą nie BeautifulSoup, więc będę po prostu zawierać to w moim struktury katalogów tak:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 9/19/2011 5:45 PM BeautifulSoup
-a--- 9/17/2011 8:06 PM 4212 myscript.py
teraz mój zmodyfikowany plik myscript.py będzie wyglądać na górze, aby odwoływać się do lokalnej kopii BeautifulSoup:
from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData
Ale co, jeśli dev eloper, który używa mojej biblioteki ma już zainstalowany BeautifulSoup na swoim komputerze? Chcę zmodyfikować myscript.py, aby sprawdzał, czy BeautifulSoup jest już zainstalowany, a jeśli tak, użyj standardowego modułu. W przeciwnym razie użyj dołączonego.
Korzystanie Pseudo-python:
if fBeautifulSoupIsInstalled:
from BeautifulSoup import BeautifulSoup, CData
else:
from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData
Czy to możliwe? Jeśli tak to jak?
Zrobione z http://effbot.org/zone/import-confusion.htm: 'Kiedy Python importuje moduł, najpierw sprawdza rejestru moduł (sys.modules) do Sprawdź, czy moduł jest już zaimportowany. W takim przypadku Python używa istniejącego obiektu modułu w postaci " – mwan
Spróbuj go zaimportować. Jeśli to nie zadziała, przechwyć ImportError i zaimportuj z lokalnej kopii. Nazwij lokalną kopię czegoś innego (myBeautifulSoup), aby nie ukrywała modułu zainstalowanego przez użytkownika. –
@mwan: Ben nie musi wiedzieć, czy już jest * zaimportowany *, musi wiedzieć, czy jest już * w systemie *. –