[英]Python Intra-Package Imports - How do I get common functions/classes spread throughout my package?
我有一組像這樣組織的python腳本:
PythonScripts/
TypeAScripts/
TypeASet1Scripts/
example.py
TypeASet2Scripts/
TypeBScripts/
TypeBSet1Scripts/
TypeBSet2Scripts/
TypeCScripts/
TypeCSet1Scripts/
TypeCSet2Scripts/
CommonFunctions/
CommonFunctions.py
每個文件夾中都有init.py
文件。 我想要的是能夠運行example.py
,其中example.py
從CommonFunctions
。 我希望整個文件夾A,B和C的腳本都執行相同的操作。
為了實現絕對導入,您需要輸入
import PythonScripts.CommonFunctions.CommonFunctions
但是,僅當PythonScripts
在您的python路徑中時,此方法才有效。 如果只是在該文件夾中運行example.py
,則情況並非如此。 您可以使用sys.append()
添加它,但這似乎是一種尷尬的方式。 有沒有更好的辦法?
Python支持相對導入,但是根據我的經驗,它們很挑剔,並且沒有按照您的期望做。 您可以在PEP 328中找到有關它們的更多信息。
我建議您正確包裝模塊並編寫setup.py
文件以將其安裝到全局site-packages目錄中。 這將允許您使用絕對導入從系統上的任何位置引用模塊,並且還為您提供了向Python程序包索引(PyPi)注冊它們的選項,以分發給第三方。 關於如何執行此操作的一個很好的教程是“ The Hitchhiker's Guide to Packaging 1.0” 。
此外,如果您擔心要破壞全局site-packages目錄,建議您在Python虛擬環境中進行測試安裝。 尤其是virtualenv
工具使使用虛擬環境變得簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.