You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下pip安装含Cython的Python模块时出现ModuleNotFoundError,Linux无此问题

问题原因

在Windows环境下使用pip install -e(可编辑模式)安装时,pip的处理流程和Linux存在差异:pip会优先执行setup.py提取包的元数据,但此时install_requires中声明的Cython还未被安装,而你的setup.py在模块顶部直接导入了Cython.Build.cythonize,这就触发了ModuleNotFoundError。

直接运行python setup.py build_ext --inplace能成功,是因为当前Python环境已经提前安装了Cython;Linux上能正常工作,是因为pip在处理可编辑安装时,会优先安装install_requires中的依赖再执行setup.py(或环境中已有Cython缓存)。

解决方案

方案1:用pyproject.toml声明构建依赖(推荐,符合PEP 518规范)

在mymodule目录下创建pyproject.toml文件,内容如下:

[build-system]
requires = ["setuptools", "wheel", "Cython"]
build-backend = "setuptools.build_meta"

这个文件会告知pip:必须先安装这些构建依赖,才能执行setup.py。这样Cython会在构建前被自动安装,彻底解决导入问题。

方案2:延迟Cython的导入到setup函数内部

修改setup.py,将Cython的导入和cythonize调用延迟到setup()函数执行时,避免模块导入阶段触发:

from setuptools import setup, Extension

setup(
    name='mymodule',
    version='0.1',
    install_requires=['Cython'],
    ext_modules=__import__('Cython.Build').cythonize(
        Extension('calculations', sources=['calculations.pyx'])
    ),
)

这种方式兼容性稍差,仅作为备选方案。


内容的提问来源于stack exchange,提问作者sunnytown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:32:37