pytest python src布局

pytest python src layout

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

enter image description here

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

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


如果您使用py.test运行测试,它将找不到应用程序,因为您一定没有安装它。您可以使用python -m pytest来运行测试,因为python会自动将当前工作目录添加到您的路径中。

因此,如果您在src目录中使用python -m pytest ..就可以了。

我通常使用的结构是:

1
2
3
4
5
6
root
├── packagename
│   ├── __init__.py
│   └── ...
└── tests
    └── ...

这样,当我在根目录中运行python -m pytest时,它就可以正常工作。更多信息请访问:https://stackoverflow.com/a/34140498/1755083

第二个选项,如果您仍然想使用py.test运行此选项,则可以使用:

1
PYTHONPATH=src/ py.test

从根上运行它。这只需将src文件夹添加到您的pythonpath中,现在您的测试将知道在哪里可以找到packagename包。

第三个选项是使用pip和-e在可编辑模式下安装包。这将创建一个指向packagename文件夹的链接,并使用pip安装它,因此在packagename中所做的任何修改都会立即反映在pip的安装中(因为它是一个链接)。问题是,如果移动repo,则需要重新安装,如果有多个克隆/软件包,则需要跟踪安装的克隆/软件包。