我正在尝试使用src目录推荐的python包布局之一。
我的问题是当我从命令行运行pytest时,我的测试没有找到我的python包。我尝试从这个目录的顶层运行并在tests目录中运行,但仍然收到ModuleNotFoundError异常。我用pytest-3.5.0运行python 3.5。
从这种类型的python包布局中执行pytest的推荐方法是什么?
答案 0 :(得分:7)
如果您使用py.test
来运行测试,则无法找到应用程序,因为您必须没有安装它。您可以使用python -m pytest
来运行测试,因为python会将您当前的工作目录自动添加到PATH。
因此,如果您在python -m pytest ..
目录中使用src
,则使用root
├── packagename
│ ├── __init__.py
│ └── ...
└── tests
└── ...
我通常使用的结构是:
python -m pytest
这样,当我在根目录中运行py.test
时,它可以正常工作。详情请见:https://stackoverflow.com/a/34140498/1755083
第二个选项,如果您仍希望使用PYTHONPATH=src/ py.test
运行此选项,则可以使用:
packagename
从根目录运行它。这只是将src文件夹添加到您的PYTHONPATH,现在您的测试将知道在哪里找到-e
包。
第三个选项是使用带有packagename
的点子以可编辑模式安装您的包。这将创建一个指向packagename
文件夹的链接并使用pip进行安装 - 因此在{{1}}中完成的任何修改都会立即反映在pip的安装中(因为它是一个链接)。这个问题是,如果你移动了repo,你需要重做安装,如果你有超过1个克隆/包,你需要跟踪安装了哪个。
答案 1 :(得分:0)
我只有两美分:
不要使用py.test
,而要使用pytest
。 py.test
是一个已过时的旧命令。
通知Windows用户;您的系统上可能没有定义PYTHONPATH
。
在这种情况下,我使用以下命令来运行测试:
set PYTHONPATH=src
pytest
要检查PYTHONPATH
:
echo %PYTHONPATH%
src
包含src
文件夹的目录结构:
setup.py
src
utils
algo.py
srel.py
__init__.py
tests
algo_test.py
srel_test.py
__init__.py
最后,文档说您可以省略__init__.py
文件。在这种情况下,删除它们对我有用。