多级相对导入
我有以下文件夹结构
top\
__init__.py
util\
__init__.py
utiltest.py
foo\
__init__.py
foo.py
bar\
__init__.py
foobar.py
我想从 foobar.py
访问模块 utiltest.py
。我尝试了以下相对导入,但这不起作用:
从 ...util.utiltest 导入 *
我总是得到
ValueError: 尝试相对导入超出顶级包
这样的多级相对导入怎么做?
最佳答案
我意识到这是一个老问题,但我觉得接受的答案可能错过了提问者代码的主要问题。严格来说,这并没有错,但它给出的建议只是巧合地解决了真正的问题。
真正的问题是 top\foo\bar
中的 foobar.py
文件作为脚本运行。当尝试(正确!)相对导入时,它会失败,因为 Python 解释器不理解包结构。
最好的解决办法是不按文件名运行 foobar.py
,而是使用 -m
标志来告诉解释器运行 top.foo.bar.foobar
模块。这样 Python 就会知道它正在加载的主模块在一个包中,并且它会准确地知道相对导入所指的位置。
关于python - 多级相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277200/