我在这里和其他网站上搜索过一个解决方案,但感觉我遇到的所有导入问题都略有不同。
我有一个具有以下设置的项目:
在b.py中:
from .a import Foo
在测试中:
import a, b
package1,package2和package3本质上是较小的包,它们与实用程序捆绑在同一个项目/超级包中。这个项目的目的是嵌套在另一个包(比如package4)中,并让这些包/模块由package4导入。因此,如果我不想修改路径,则需要相对导入包中的其他文件。
例如,package4:
我在上面的层次结构中省略了__init __。py。在main.py中,我可能会这样做:
import src.external.project_from_above.package1.a
我的问题:除了单元测试外,此结构运行正常。我习惯于从每个包(package1,package2,package3)运行python3 -m unittest discover tests
。当没有相对导入时,这很好。但是,使用相对导入运行将产生以下错误:" SystemError:父模块''未加载,无法执行相对导入"
我希望: 一种在package1目录中运行单元测试的方法,没有导入更改(或者至少保持在上述package4中使用整个项目作为子包的能力)。我想避免对路径进行任何操作,但是如果我们可以将它限制在package1中的run_tests.py文件中,那就没关系。
答案 0 :(得分:1)
这是一个解决方案:在package1中添加一个名为run_tests的文件。在其中,执行以下操作:
cd ..
python -m unittest discover package1/tests
这要求您在测试中使用绝对导入(例如,import package1.a
)