首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cython运行pytest -如何在pytest中编译cython模块?

使用cython运行pytest -如何在pytest中编译cython模块?
EN

Stack Overflow用户
提问于 2018-01-18 21:18:48
回答 1查看 1.1K关注 0票数 4

我有一个项目组织如下:

代码语言:javascript
复制
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导入计算机化扩展:

代码语言:javascript
复制
 """api.py""""
 from _cython_foo import cython_fun

我的安装脚本正确地构建了.pyx源代码,并且能够在已安装的包中使用cython_fun

代码语言:javascript
复制
import project.module1.api as module1
module1.cython_fun()    # OK

但是,pytest抱怨说它无法导入cython模块,因为编译后的二进制文件在我调用安装程序之前是不存在的。

代码语言:javascript
复制
project/module1/api.py:2: in <module>
    from _cython_foo import cython_fun
E   ImportError: No module named _cython_foo

在pytest所依赖的项目目录中保留一堆预编译的二进制文件似乎很糟糕,那么是否有一种常规的方法让pytest临时构建cython模块,只用于我的单元测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 22:21:27

我知道两种将pytest与计算机化扩展结合在一起的方法:

  1. 不要通过pytest直接调用测试;相反,在安装脚本中使用就地测试命令。为此,安装添加了一个pytest-runner命令的pytest插件: $ pip安装pytest转轮 现在,您应该能够使用pytest调用测试,方法是 $ python setup.py pytest 然而,这种方法需要在传递命令行args的方式上进行一些更改:命令的挂件。 $ pytest --arg1 1--arg1 2 将会是 $ python setup.py pytest -addopts“-arg1-arg2”
  2. 如果您想继续使用pytest命令:以开发模式安装项目(理想情况下,在维塔列夫中)。 (myenv) $ pip install -可编辑的dir/ 其中dir/是包含setup.py脚本的目录。现在,扩展将被预先构建,pytest将能够解决它们。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48330471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档