目标是将pytest单元测试框架用于使用Cython的Python3项目。这不是一个即插即用的东西,因为默认情况下pytest无法导入Cython模块。也就是说,从Cython .pyx模块导入时出现以下错误,在我的情况下命名为' calculateScore':
L.tileLayer('/map-tiles/map_{x}_{y}.png', {
bounds: [[-1280, -1280], [1280, 1280]]
}).addTo(map);
使用pytest-runner和pytest-cython方法时都会出现此问题。奇怪的是,当您不使用package/mainmodule.py:5: in <module>
from calculateScore import some_functions
E ImportError: No module named 'calculateScore'
尝试对其进行测试时,代码作为python应用程序运行得很好。
将导入样式更改为pytest
或import calculateScore
无济于事。
答案 0 :(得分:1)
我不知道为什么会发生这种情况,但对我来说最简单的解决方案是使用 pytest-cython
方法并更改包中setup.py
中列出的一项或多项内容文件:
Extension
定义ext_modules
以包含Cython .pyx
文件时,不使用distutils.extension.Extension
,而是使用 setuptools.Extension
强> 我手动创建Extension
而不是使用Cython.Build.cythonize
功能的原因在这里并不重要。但请注意,对于 pytest-runner
方法:
cythonize
功能,但手动创建扩展程序写完这篇文章之后,我似乎无法再使用pytest-cython
来重现问题,这表明可能是其他原因导致了问题。您可以尝试的另一件事是确保:
为Extension
模块手动创建.pyx
时,请确保Extension
的名称与模块名称相同(因此将其命名为'calculateScore'并且不例如'package.calculateScore')。
删除与您的.so
文件对应的已编译.pyx
文件,然后重新运行。