pytest 在导入时找不到模块,但代码运行良好

PDi*_*lta 5 cython pytest python-3.x

目标是为使用 Cython 的 Python3 项目使用 pytest 单元测试框架。这不是即插即用的事情,因为默认情况下 pytest 无法导入 Cython 模块。也就是说,从 Cython .pyx 模块导入时出现以下错误,在我的例子中名为“calculateScore”:

package/mainmodule.py:5: in <module>
    from calculateScore import some_functions
E   ImportError: No module named 'calculateScore'
Run Code Online (Sandbox Code Playgroud)

使用pytest-runnerpytest-cython方法时都会出现此问题。奇怪的是,当您不尝试使用pytest. 将导入样式更改为import calculateScoreimport package.calculateScore没有帮助。

PDi*_*lta 1

我不知道为什么会发生这种情况,但对我来说,最简单的解决方案是使用该pytest-cython方法并更改包setup.py文件中下面列出的一项或多项内容:

  • 当定义Extension包含ext_modulesCython.pyx文件时,不要使用而是distutils.extension.Extension使用setuptools.Extension

Extension我手动创建而不是使用该函数的原因Cython.Build.cythonize在这里并不重要。但请注意,对于该pytest-runner方法:

  • 使用cythonize功能,而是手动创建扩展

写完这篇文章后,我什至无法再使用它来重现该问题pytest-cython,这表明也许其他原因是问题的原因。您可以尝试的另一件事是确保:

  • Extension为您的模块手动创建时.pyx,请确保其名称Extension与模块的名称相同(因此将其命名为“calculateScore”,而不是“package.calculateScore”)。

  • .so删除你的文件对应的编译文件.pyx然后重新运行。