从命令行获取 运行 测试与 运行 程序的不同 ModuleNotFound 错误

Getting different ModuleNotFound errors for running tests vs running program from command line

我用下面的树做了一个项目。

/ project
   / logic
     - app.py
     - utils.py
     - exceptions.py
   / tests
     - tests.py
   - README
   - requirements.txt

该代码是来自命令行的 运行。 app.py 包含 main 逻辑。

app.py 中,我这样导入实用程序: from utils import validate_args

所以当我 运行 python app.py 时,一切都按预期进行。

但是当我 运行 nosetests 时,它立即失败,引用 app.py 中的 utils 的导入作为原因:

File ".../project/app.py", line 4, in <module>
  ModuleNotFoundError: No module named 'utils'

这可以通过将导入更改为 .utils 来解决,但随后命令行命令失败:

ModuleNotFoundError: No module named '__main__.utils'; '__main__' is not a package

我曾尝试将 __init__.py 文件以各种组合方式添加到 /project/logic/tests 目录中,但均无济于事 - 但老实说,我只是在猜测。关于导入逻辑,我缺少什么?

我通过 运行 带有 -m 标志的程序解决了这个问题...哦!