簡體   English   中英

如何組織一個可以作為__main__程序運行腳本的python模塊?

[英]how to organize a python module that scripts can be run as __main__ program?

我正在用python啟動一個項目,現在的代碼結構如下:

project/
        __init__.py
        a.py
        b.py
        mainA.py
        utilities/
                   __init__.py
                   mainB.py
                   c.py

__init__文件全部為空。

我想將utilities/mainB.py作為程序運行(使用類似python main.py類的東西),並且mainB需要導入a.pyb.py 所以我嘗試了from .. import a和其他方法,但是import失敗。 錯誤信息是:

ValueError:嘗試非包中的相對導入

因此,出現了以下問題:

  1. 如何修復mainB.py ,使其可以作為主程序運行?
  2. mainA.py現在可以作為主程序運行,它也可以導入a.pyb.py (使用import aimport b )。 我認為代碼結構可能會變得更加復雜。 說,如果mainA.py必須從project/some/directory導入模塊,我該怎么做?

請參閱前面的問題 您有兩個選擇。 一種是使用PEP 366中所述的__package__屬性來設置模塊的相對名稱。 另一種方法是將腳本作為模塊執行(使用解釋器的-m標志),而不是直接將其作為腳本運行。

您可以使用Python的內置模塊運行功能( python -m <module> )。

python -m project.utilities.mainB

這使您可以將mainB作為包的一部分正常編寫,因此相對導入和絕對導入都可以正常工作。

有關此功能的深入討論,請參閱PEP-338

您應該在PYTHON_PATH中添加“ project”目錄,然后在mainB.py中添加:

from project import a

暫無
暫無

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

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