pytest python src布局

时间:2018-03-31 14:58:30

标签: python pytest

我正在尝试使用src目录推荐的python包布局之一。

enter image description here

我的问题是当我从命令行运行pytest时,我的测试没有找到我的python包。我尝试从这个目录的顶层运行并在tests目录中运行,但仍然收到ModuleNotFoundError异常。我用pytest-3.5.0运行python 3.5。

从这种类型的python包布局中执行pytest的推荐方法是什么?

2 个答案:

答案 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,而要使用pytestpy.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文件。在这种情况下,删除它们对我有用。