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

Cython打包问题:如何使安装后的Python包同时包含.pxd、.pyx与编译生成的.so文件

Cython打包问题:如何使安装后的Python包同时包含.pxd、.pyx与编译生成的.so文件

看起来你已经走完了大部分流程,核心问题其实是分发包没有包含你的.pxd和.pyx源文件,导致pip install .后只有编译好的.so。我来帮你一步步解决:

第一步:补全MANIFEST.in配置

你项目里已经有MANIFEST.in,但大概率没正确配置包含Cython源文件。这个文件控制着生成源码分发包(sdist)时要包含哪些非Python默认文件,直接在里面加上:

recursive-include test_package *.pxd
recursive-include test_package *.pyx

这样生成的sdist包就会把所有子目录下的.pxd和.pyx都打包进去,pip安装时才会把它们复制到site-packages的包目录里。

第二步:确认setup.py的配置正确性

你当前的package_data和include_package_data=True配置是对的,但可以再明确一点(避免路径匹配问题):

package_data={
    "test_package": ["**/*.pxd", "**/*.pyx"]
},
include_package_data=True,

这个配置会告诉setuptools,安装时要把package_data里指定的文件和MANIFEST.in里包含的文件一起复制到目标目录。

第三步:验证分发包内容

先手动生成源码包看看是否包含了所需文件,执行:

python setup.py sdist

然后去dist目录解压生成的test_package-1.0.0.tar.gz,检查里面的test_package目录下是否有所有的.pxd和.pyx文件。如果有,说明配置没问题了。

第四步:测试安装

现在再执行pip install .,安装完成后去你的Python环境的site-packages/test_package目录下看看,应该同时存在:

  • 编译好的.so文件(比如mappings.cpython-310-x86_64-linux-gnu.so)
  • 原始的.pxd和.pyx文件

解释你之前的测试现象

  • pip install -e .是开发模式,它直接把本地源码目录链接到Python环境,所以源文件都在原地,.so也是在本地编译生成的,因此egg-info/SOURCES.txt会包含源文件,但不会包含.so(因为开发模式不复制so到site-packages)。
  • 之前pip install .后只有.so,是因为生成的sdist包没包含.pxd和.pyx,所以安装时只有编译后的文件被复制进去。

另外,如果你用wheel包分发,也要确保wheel包含这些源文件,不过只要MANIFEST.in和package_data配置正确,setuptools会自动处理。

备注:内容来源于stack exchange,提问作者Vera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:59:34