文件夹结构:
main
|__ sub1
|__ __init__.py
|__ sub2
|__ test.py
我需要在test.py
内导入:
from .. sub1 import SomeClass
它显示此错误:
ValueError:尝试相对导入超出顶级包。
感谢您的回复。
答案 0 :(得分:0)
main
和sub2
都不是包,因为它们都不包含__init__.py
。有关更多信息,请参见the relevant Python docs。
答案 1 :(得分:0)
这是一个特殊的用例,用于从主源文件夹外部进行测试。 main
没有理由成为一个软件包,是否有可能不成为一个软件包。
恕我直言,最好的方法是从主目录开始测试。由于当前目录始终位于sys.path
中,因此sub1
将是可直接导入的,这就足够了:
from sub1 import SomeClass
但是根据您的开发环境,您可能需要直接从测试目录或除main以外的任何目录中启动测试。在那种情况下,我不确定这是否是最佳实践,并且仅将其用于测试,但是一个简单的技巧是将测试文件夹的父文件夹添加到sys.path
。
以下是test.py
的开头:
import os.path
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from sub1 import SomeClass
...
了解它的含义:一个sys.path
技巧,仅允许从测试文件夹访问主源文件夹。