Python 3.x pytest无法在导入时找到模块,但代码运行正常
目标是为使用Cython的Python3项目使用pytest单元测试框架。这不是一个即插即用的东西,因为pytest默认情况下不能导入Cython模块。也就是说,从Cython.pyx模块导入时,在名为“calculateScore”的示例中,出现以下错误:Python 3.x pytest无法在导入时找到模块,但代码运行正常,python-3.x,cython,pytest,Python 3.x,Cython,Pytest,目标是为使用Cython的Python3项目使用pytest单元测试框架。这不是一个即插即用的东西,因为pytest默认情况下不能导入Cython模块。也就是说,从Cython.pyx模块导入时,在名为“calculateScore”的示例中,出现以下错误: package/mainmodule.py:5: in <module> from calculateScore import some_functions E ImportError: No module name
package/mainmodule.py:5: in <module>
from calculateScore import some_functions
E ImportError: No module named 'calculateScore'
package/mainmodule.py:5:in
从calculateScore导入一些函数
E ImportError:没有名为“calculateScore”的模块
此问题在使用和方法时都会发生。奇怪的是,当您不尝试使用pytest
对其进行测试时,该代码作为python应用程序运行良好。
将导入样式更改为
import calculateScore
或import package.calculateScore
没有帮助。我不知道为什么会发生这种情况,但对我来说,最简单的解决方案是使用pytest cython方法,并在包的setup.py
文件中更改下面列出的一项或多项内容:
- 为
ext\u模块定义
扩展名
以包含Cython
文件时,不要使用.pyx
,而是使用distutils.Extension.Extension
setuptools.Extension
扩展
而不是使用Cython.Build.cythonize
函数的原因在这里并不重要。但请注意,对于pytest runner方法:
- 不要使用
功能,而是手动创建扩展名cythonize
pytest-cython
重现这个问题了,这表明可能是其他原因导致了这个问题。您可以尝试的另一件事是确保:
- 为
模块手动创建.pyx
扩展名时,请确保
与模块名相同(因此将其命名为“calculateScore”,而不是例如“package.calculateScore”)扩展名
- 删除与
文件对应的编译后的.pyx
文件,然后重新运行.so