我有一个项目组织如下:
project
├── project
│ ├── module1
│ │ ├── api.py
│ │ ├── _cpython_foo.py
│ │ └── _cython_foo.pyx
│ └── module2
├── setup.py
└── tests
└── module1
├── test_cython_foo.py
└── test_cpython_foo.py其中,api.py导入计算机化扩展:
"""api.py""""
from _cython_foo import cython_fun我的安装脚本正确地构建了.pyx源代码,并且能够在已安装的包中使用cython_fun:
import project.module1.api as module1
module1.cython_fun() # OK但是,pytest抱怨说它无法导入cython模块,因为编译后的二进制文件在我调用安装程序之前是不存在的。
project/module1/api.py:2: in <module>
from _cython_foo import cython_fun
E ImportError: No module named _cython_foo在pytest所依赖的项目目录中保留一堆预编译的二进制文件似乎很糟糕,那么是否有一种常规的方法让pytest临时构建cython模块,只用于我的单元测试?
发布于 2018-01-18 22:21:27
我知道两种将pytest与计算机化扩展结合在一起的方法:
pytest直接调用测试;相反,在安装脚本中使用就地测试命令。为此,安装添加了一个pytest-runner命令的pytest插件:
$ pip安装pytest转轮
现在,您应该能够使用pytest调用测试,方法是
$ python setup.py pytest
然而,这种方法需要在传递命令行args的方式上进行一些更改:命令的挂件。
$ pytest --arg1 1--arg1 2
将会是
$ python setup.py pytest -addopts“-arg1-arg2”pytest命令:以开发模式安装项目(理想情况下,在维塔列夫中)。
(myenv) $ pip install -可编辑的dir/
其中dir/是包含setup.py脚本的目录。现在,扩展将被预先构建,pytest将能够解决它们。https://stackoverflow.com/questions/48330471
复制相似问题