簡體   English   中英

使用相對導入作為 __main__ 運行模塊

[英]Running a module with relative imports as __main__

我有這樣的文件結構:

- __init__.py
- module.py
+ subpackage
|--- __init__.py
|--- submodule1.py
|--- submodule2.py
|--- etc
  • submodule1.py 從 submodule2.py 導入
  • 從 submodule1.py 導入模塊

為此,我使用了相對導入。 例如,在 submodule1.py 中:

from .submodule2 import MyClass

我遇到的問題是,現在使用相對導入,我無法將 submodule1.py 作為main運行。 如果我嘗試,我會收到此錯誤:

    from .module2 import MyClass
    ModuleNotFoundError: No module named '__main__.module2'; '__main__' is not a package

我喜歡在我的模塊末尾包含一個if __name__ == "__main__":在開發過程中進行測試(在某些情況下,模塊甚至可能用作獨立腳本)。

有沒有辦法在這個上“吃我的蛋糕也吃”? 或者將代碼從if __name__ == "__main__":遷移到單獨的腳本是我最好的選擇嗎?

您似乎試圖將模塊作為獨立腳本運行,而不是作為包的成員運行。 當你在一個包中運行一個模塊時,你需要讓 Python 知道模塊在你的包結構中的位置。 這是通過使用-m命令行標志調用 Python 解釋器來完成的。 例如,而不是寫

python3 ./my_package/subpackage/submodule1.py

python3 -m my_package.subpackage.submodule1

這將使解釋器能夠適當地確定您的包的結構並解析您使用的任何相關導入。 有關更多信息,請參閱有關使用-m標志的相關問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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