我正在尝试使用src目录推荐的python包布局之一.
我的问题是当我从命令行运行pytest时,我的测试没有找到我的python包.我尝试从这个目录的顶层运行并在tests目录中运行,但仍然收到ModuleNotFoundError异常.我用pytest-3.5.0运行python 3.5.
从这种类型的python包布局中执行pytest的推荐方法是什么?
如果您正在使用py.test运行测试,它将找不到应用程序,因为您必须没有安装它.您可以python -m pytest用来运行测试,因为python会将您当前的工作目录自动添加到PATH中.
因此,python -m pytest ..如果您在src目录中执行此操作,则可以使用
我通常使用的结构是:
root
??? packagename
? ??? __init__.py
? ??? ...
??? tests
??? ...
Run Code Online (Sandbox Code Playgroud)
这样,当我只是python -m pytest在根目录中运行时,它工作正常.欲了解更多信息,请访问:https://stackoverflow.com/a/34140498/1755083
第二个选项,如果你仍想运行它,py.test你可以使用:
PYTHONPATH=src/ py.test
Run Code Online (Sandbox Code Playgroud)
并从根运行它.这只是将src文件夹添加到PYTHONPATH中,现在您的测试将知道在哪里找到该packagename包.
第三个选项是使用pip with -e以可编辑模式安装包.这将创建一个指向该packagename文件夹的链接并使用pip进行安装 - 因此所做的任何修改packagename都会立即反映在pip的安装中(因为它是一个链接).这个问题是,如果你移动了repo,你需要重做安装,如果你有超过1个克隆/包,你需要跟踪安装了哪个.
您的布局看起来不错,是今天推荐的。
但我认为你的问题出import在你的test_*.py文件中。您不应该关心在单元测试中从哪里导入包;只需导入它们即可。
--editable这怎么可能做到呢?您必须在开发模式下“安装”您的软件包。使用--editable的选项pip。在这种情况下,不会构建和安装真正的包,而是仅使用符号链接将包文件夹(开发人员版本中的源)公开给操作系统,因为它将是真正的发布包。
现在你的单元测试永远不需要关心包安装在哪里以及如何导入它。只需导入它即可,因为系统已知该包。
注意:这是今天推荐的方式。sys.path其他通过操作或环境变量进行修改的“解决方案”PYTHONPATH只是来自 Python 的早期,现在应该避免。
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |