簡體   English   中英

Python包內導入-如何獲得在包中散布的通用函數/類?

[英]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.pyCommonFunctions 我希望整個文件夾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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM