2012-05-31 70 views
1

我們有一個應用程序,使用戶可以使用插件對其進行擴展。我們已經提供了一些輔助模塊,因此從他們的插件,用戶可以使用Python:從當前已棄用的位置導入模塊時發出警告

import helpermodule 

現在,我們已經決定,這將是更好的改變助手模塊的包裝,使所有的人都從主裝載訪問它們像這樣的包:

from ourpackage import helpermodule 

由於我們不想破壞用戶插件中存在的代碼,我們仍然提供舊的方式。 (實際上,我們剛剛在我們的源代碼中的__init__.py文件中導入了幫助程序模塊。)當用戶腳本導入老方法。

所以我的問題是:有沒有辦法判斷用戶是否以「錯誤」的方式導入了一個輔助模塊?理想情況下,我們希望在不檢查用戶代碼的情況下實現此目的。

回答

1

這取決於你如何實現「仍然提供舊方式」。這聽起來像是你正在將舊模塊直接放在搜索路徑上,只是在我們的包內做import helpermodule。 (也就是說,你自己仍然以「錯誤」的方式導入模塊。)在這種情況下,這是一種可能性。

\dir_on_path 
helper.py 
    \ourpackage 
     __init__.py 

#### helper.py 
import sys 
if 'testpack' in sys.modules: 
    print "Imported the good way" 
else: 
    print "Imported the bad way" 
#### 

#### __init__.py 
import teststuff 
#### 

但是,請注意,這樣做會留下一些尷尬的問題。您將無法執行import testpack.teststuff。而且,這個人仍然有可能以好的和壞的方式導入測試用例,在sys.modules中創建兩個獨立的副本。

如果這不是你「仍然提供舊的方式」,請編輯澄清。