我在项目的嵌套目录中运行 python 测试时遇到问题。
我正在一个现有的python项目中工作,其结构如下:
-foo
__init__.py
-bar
__init.py__
main.py
utils.py
-baz
__init__.py
a.py
b.py
a_test.py
在main.py
中,它的导入如下:
import utils
from baz import a
...
在a.py
其中导入如下:
import utils
from baz import b
...
main.py
从项目根目录执行工作正常,例如:
python bar/main.py
失败的是如果我尝试a_test.py
直接执行:
python bar/baz/a_test.py
ModuleNotFoundError: No module named utils
在a_test.py
中,我有:
import utils
from baz import a
...
class ATest(absltest.TestCase):
...
if __name__ == '__main__':
absltest.main()
我想我明白这里发生了什么。当我python bar/main.py
从项目根目录执行时,它正在考虑bar/
在 中sys.path
,因此所有导入的文件都可以直接引用之类的东西import utils
而没有问题。当我运行测试时,bar/
不再在路径上,因此import utils
失败。
但是,我需要能够在_test.py
使用时直接将文件作为脚本执行,absl.flags
这需要调用该__main__
方法,以便absltest.main()
可以调用它来解析来自 argv 的标志。也就是说,类似的东西 python -m unittest discover -s bar -p '_test.py' -v
无法运行测试。
import
所以我的问题是,我如何以统一的方式构建这个项目及其语句,以便我可以main.py
作为脚本调用,同时仍然允许我的_test.py
文件也被直接调用?