2011-09-19 160 views
7

我想使用模塊,例如, BeautifulSoup,在我的Python代碼,所以我通常將其添加到文件的頂部:僅在Python中不存在模塊時才導入模塊

from BeautifulSoup import BeautifulSoup 

然而,當我發佈我寫的模塊,其他人可能沒有BeautifulSoup,所以我就包括它在我的目錄結構如下所示:

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
d----   9/19/2011 5:45 PM   BeautifulSoup 
-a---   9/17/2011 8:06 PM  4212 myscript.py 

現在,我的修改myscript.py文件看起來像這樣在頂部引用BeautifulSoup的本地副本:如果dev的

from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

但誰使用我的圖書館的Eloper已經在他們的機器上安裝了BeautifulSoup?我想修改myscript.py,以便檢查是否已安裝BeautifulSoup,如果是,請使用標準模塊。否則,使用包含的。

使用僞蟒蛇:

if fBeautifulSoupIsInstalled: 
    from BeautifulSoup import BeautifulSoup, CData 
else: 
    from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

這可能嗎?如果是這樣,怎麼樣?

+1

從http://effbot.org/zone/import-confusion.htm摘自:'當Python導入一個模塊,它首先檢查模塊註冊表(sys.modules中),以看看模塊是否已經導入。如果是這樣,Python會按原樣使用現有的模塊對象。「 – mwan

+0

嘗試導入它。如果不起作用,請捕獲ImportError並從本地副本導入。將其他名稱命名爲本地副本(myBeautifulSoup),以便它不隱藏用戶安裝的模塊。 –

+0

@mwan:Ben不需要知道它是否已經*導入*,他需要知道它是否已經*在系統*上。 –

回答

15

通常以下模式用於處理Python中的這種情況。

首先將您的BeautifulSoup模塊重命名爲其他東西,例如MyBeautifulSoup

然後:

try: 
    import BeautifulSoup # Standard 
except ImportError: 
    import MyBeautifulSoup as BeautifulSoup # internal distribution