我的程序有一个结构,像这样:相对进口结构
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