迁移至uv后,如何构建并打包CFFI扩展进Python Wheel?
解决pyreaddbc迁移uv包管理的配置问题
针对你遇到的两个问题,以下是具体的配置修正方案:
一、让构建脚本自动运行的配置调整
uv 遵循PEP 621标准,需确保pyproject.toml的构建系统配置正确关联CFFI的编译流程:
规范build-system段配置
确保构建依赖包含setuptools、wheel和cffi,并使用setuptools作为构建后端(CFFI扩展编译依赖setuptools的构建流程):[build-system] requires = ["setuptools>=61.0", "wheel", "cffi>=1.0.0"] build-backend = "setuptools.build_meta"自动触发CFFI编译(替代手动构建脚本)
无需单独写构建脚本,直接在pyproject.toml中配置CFFI模块,uv构建时会自动调用cffi编译扩展:[tool.cffi] modules = [ { name = "_readdbc", sources = ["src/_readdbc.c", "src/readdbc.c"] }, # 替换为你的实际源码文件路径 ]如果你坚持使用自定义构建脚本(如
setup.py),需确保setup.py中包含CFFI的编译逻辑(如ffi.compile()),且build-system的build-backend保持为setuptools.build_meta,uv会自动执行setup.py中的构建逻辑。
二、确保_readdbc.so被打包进wheel
如果是手动编译的.so文件,需显式告知setuptools将其纳入包资源:
配置package-data
在pyproject.toml中添加tool.setuptools相关配置,指定目标包要包含的.so文件:[tool.setuptools] package-dir = {"" = "src"} # 假设你的包源码在src目录下 packages = ["pyreaddbc"] # 替换为你的包名 [tool.setuptools.package-data] pyreaddbc = ["*.so"] # 匹配包目录下所有.so文件备选:使用MANIFEST.in
在项目根目录创建MANIFEST.in文件,写入以下内容(路径需匹配你的.so实际位置):include src/pyreaddbc/_readdbc.sosetuptools会读取该文件,将指定文件包含进构建产物。
注意:如果使用CFFI自动编译扩展,生成的
.so会被自动识别为扩展模块并打包,无需手动配置package-data。
内容的提问来源于stack exchange,提问作者fccoelho
相关产品推荐
相关产品推荐

