我的程序有一個結構,像這樣:相對進口結構
scripts/
__init__.py
mod1.py
mod2.py
sub1/
__init__.py
mod3.py
sub2/
__init__.py
mod4.py
所有程序都開始mod1.py
該選擇哪些後續腳本(mod3/mod4.py
)來運行基於切斷提供系統參數。所以導入的頂級目錄是scripts/
。
說我運行我的程序,使>mod1.py 3
執行sub1.mod3
。在mod3
我需要在mod2
中定義的函數(該模塊包含用於mod3/mod4
的重用代碼塊)。
當我嘗試from .. import mod2
我得到ValueError
,我試圖超過頂級目錄的相對導入。我在語法上引用docs,如果我們將它們與我的情況進行比較,則mod3.py
將是當前模塊(在mod1.py
之後)調用它。
我如何嘗試進行相對進口有什麼問題?
mod1.py:
import sys
def imp(module):
m = __import__(module) # equivalent to import module as m
m.start()
if __name__ == '__main__':
mods = {'3': 'sub1.mod3',
'4': 'sub2.mod4'}
imp(mods[sys.argv[1]])
mod3.py
from .. import mod2 # fails
import mod2 # works; guessing since import considers mod1 location top-level
.
.
.
def start():
# do stuff
'mod2'不在'scripts.sub2' – datta