2016-10-24 195 views
5

偶爾,應用程序與第三方軟件包中的內部文件之間會發生模塊名稱衝突。例如,當前文件夾中名爲profile.py的文件將導致jupyter notebook崩潰,因爲它試圖導入它而不是它自己的profile.py。從包用戶的角度來看,避免這個問題的好方法是什麼? (或者是這個東西,包開發者應該以某種方式阻止?)處理模塊名稱衝突

注意:當發生類似的問題,由於應用內置的名稱(例如,time.pysocket.py),至少是相對容易的之間的衝突請記住標準庫模塊和其他內置對象的名稱。

回答

2

當前目錄是包含應用程序主腳本的目錄。如果您想避免在該目錄中發生名稱衝突,請不要放入任何模塊。

而是使用命名空間。在主腳本的目錄中創建一個唯一命名的包,並從中導入所有內容。主要的腳本應該是非常簡單的,並且包含什麼比這更:

if __name__ == '__main__': 

    from mypackage import myapp 

    myapp.run() 

所有封裝內部組件也應該使用from進口到包內訪問其他模塊。例如,myapp.py可能包含:

from mypackage import profile