Cython执行build_ext --inplace未生成.so/.pyd文件原因排查
Cython仅生成.c文件无pyd/so文件原因及解决方案
- 未指定MinGW编译器:Windows平台下Python的distutils默认使用MSVC作为编译后端,你当前使用MinGW作为编译工具,需要在执行命令时显式指定编译器,否则生成C文件后会因找不到对应编译工具直接终止流程,不会生成最终的pyd扩展文件。调整后的执行命令为:
python setup.py build_ext --inplace --compiler=mingw32 - MinGW与Python位数不匹配:你使用的是64位Windows 7和64位Python 3.8,必须对应安装64位版本的MinGW-w64,若安装的是32位MinGW,编译过程会因架构不匹配中断。可执行
gcc -v查看当前gcc版本信息,若Target项为x86_64-w64-mingw32则为64位版本,若为i686-w64-mingw32则为32位版本,需重新安装对应架构的MinGW。 - 环境变量配置缺失:需要将MinGW安装目录下的bin文件夹路径加入系统环境变量PATH中,确保distutils可以正常调用gcc、ld等编译链接工具。修改环境变量后需要重启终端再执行编译命令才会生效。
- Python 3.8与MinGW兼容问题:Cython 0.29.24编译Python 3.8及以上版本的扩展时,MinGW可能会出现找不到vcruntime相关依赖的报错,你可以选择升级Cython到最新的0.29.x版本,也可以在setup.py中添加编译参数适配,示例修改后的setup.py如下:
import os from distutils.core import setup from Cython.Build import cythonize os.chdir(os.path.dirname(__file__)) setup( ext_modules = cythonize('example123.pyx'), options={"build_ext": {"compiler": "mingw32"}}, extra_compile_args=["-DMS_WIN64"] )
- 排查具体报错信息:如果上述操作都完成后还是没有生成pyd文件,可以在编译命令中添加
-v参数输出详细编译日志,定位具体报错环节:python setup.py build_ext --inplace -v
内容的提问来源于stack exchange,提问作者Kaiyakha
相关产品推荐
相关产品推荐

