我希望我的 测试文件夹与我的应用程序代码分开。我的项目结构是这样的
myproject/
myproject/
myproject.py
moduleone.py
tests/
myproject_test.py
我的项目.py
from moduleone import ModuleOne
class MyProject(object)
....
我的项目_test.py
from myproject.myproject import MyProject
import pytest
...
我使用 myproject.myproject
因为我使用命令
python -m pytest
从项目根目录 ./myproject/
但是,这些模块中的导入失败了
E ModuleNotFoundError: 没有名为“moduleone”的模块
我正在运行 Python 3.7 并且从 3.3 开始读到,空的 __init__
不再需要文件,这意味着我的项目变成了一个 隐式命名空间包
However, I have tried adding an __init__.py
file in myproject/myproject/
and also tried adding a conftest.py
file in myproject/
but neither works
我已经 阅读 了说要 弄乱路径的 答案,然后在其他问题中发表了评论,说 不要。
什么是正确的方法,我错过了什么?
编辑;
可能相关,我使用 requirements.txt
使用 pip 安装 pytest。这可能有关系吗?如果是这样,在这种情况下安装 pytest 的正确方法是什么?
编辑 2:
sys.path
中的路径之一是 /usr/src/app/
这是一个与 /my/local/path/myproject/
的 docker 卷。
音量应该改为 /my/local/path/myproject/myproject/
吗?
原文由 myol 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决方案:使用
PYTHONPATH
。变量正如@J_H 所提到的,您需要显式添加项目的根目录,因为
pytest
只会添加到sys.path
测试文件所在的目录(这就是为什么@Mak2006 的答案有效。 )好的做法:使用 Makefile 或其他一些自动化工具
如果你不想一直输入那个长命令,一个选择是在你的项目的根目录中创建一个
Makefile
,例如:这使您可以简单地运行:
另一种常见的替代方法是使用一些标准测试工具,例如 tox 。