gpt4 book ai didi

python-3.x - pytest 在导入时找不到模块,但代码运行得很好

转载 作者:行者123 更新时间:2023-12-03 16:26:20 25 4
gpt4 key购买 nike

目标是为使用 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'

使用 pytest-runner 时都会出现此问题。以及 pytest-cython方法。奇怪的是,当您不尝试使用 pytest 对其进行测试时,该代码作为 python 应用程序运行得很好。 .
将导入样式更改为 import calculateScoreimport package.calculateScore没有帮助。

最佳答案

我不知道为什么会这样,但对我来说最简单的解决方案是使用 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 对应的文件文件,然后重新运行。
  • 关于python-3.x - pytest 在导入时找不到模块,但代码运行得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49068162/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com