0

我在项目的嵌套目录中运行 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文件也被直接调用?

4

0 回答 0