安装含Cython编译文件的Python包时编译版本不生效问题求助
问题核心原因
- 你自定义的
build_py类缺少sysconfig模块导入,逻辑无法正常执行 - 你没有将自定义的
build_py命令注册到setup参数中,导致过滤.py源码的逻辑完全没有生效,所有.py文件都被打包进了安装后的包 - 多次构建残留的缓存、临时文件会污染最终的安装包
修复步骤
1. 修正setup.py代码
- 头部新增导入:
import sysconfig - 在
setup()的参数中新增一行配置,注册自定义构建命令:cmdclass={'build_py': build_py},
2. 清理旧构建产物
执行以下命令删除所有残留的临时文件、缓存、之前编译的扩展:
rm -rf build dist *.egg-info __pycache__ find . -name "*.so" -o -name "*.pyd" -o -name "*.pyc" | xargs rm -f
3. 执行安装命令
两种安装方式二选一即可:
方式一:直接源码安装
pip install . --force-reinstall
方式二:构建wheel包后安装
python setup.py bdist_wheel pip install dist/my_pkg-0.1-cp38-cp38-linux_x86_64.whl --force-reinstall
验证结果
离开项目根目录后执行测试代码,如果输出前缀为cyfunction,说明已经成功加载Cython编译后的版本。
如果仍有问题,可以到Python的site-packages目录下查看mypkg的安装目录,确认需要编译的模块对应的.py源码已经被过滤,仅保留.so扩展文件即可。
内容的提问来源于stack exchange,提问作者student1868
相关产品推荐
相关产品推荐

