Python unittest导入问题

Atu*_*tia 6 python unit-testing importerror flask

这是我的项目设置:

my_project
    ./my_project
         ./__init__.py
         ./foo
              ./__init__.py
              ./bar.py
         ./tests
             ./__init__.py
             ./test_bar.py
Run Code Online (Sandbox Code Playgroud)

在里面test_bar.py我有以下import语句: from foo import bar

但是,当我运行时,python /my_project/tests/test_bar.py我收到此错误:

ImportError: No module named foo.

有想法该怎么解决这个吗?

dav*_*ism 9

想想你的是什么PYTHONPATH.您的项目的顶级包是my_project,因此必须是项目中某些内容的任何导入的开始.

from my_project.foo import bar
Run Code Online (Sandbox Code Playgroud)

您也可以使用相对导入,虽然这不是很清楚,如果您更改了执行此导入的模块的相对位置,则会中断.

from ..foo import bar
Run Code Online (Sandbox Code Playgroud)

理想情况下,该test文件夹根本不是包,也不是应用程序包的一部分.请参阅pytests的良好实践页面.这要求您setup.py在包中添加一个并在开发模式下将其安装到virtualenv中.

pip install -e .
Run Code Online (Sandbox Code Playgroud)

不要通过直接指向应用程序中的文件来运行测试.在正确构建/安装项目之后,使用发现机制来处理您用于为您运行测试的任何框架.例如,使用pytest,只需指向test文件夹:

pytest tests
Run Code Online (Sandbox Code Playgroud)

或者对于内置的unittest模块:

python -m unittest discover -s tests
Run Code Online (Sandbox Code Playgroud)