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

Ubuntu下pip构建wheel时package_data存入purelib的原因及配置方法

问题解析与解决方案

核心原因:pip/wheel版本差异

你遇到的差异本质是工具链版本不同导致的行为区别:

  • Ubuntu 22.04自带的pip 22.0.2搭配的wheel、setuptools版本较低,在处理你自定义的BinaryDistribution(强制生成平台专属二进制包)时,对package_data的归类逻辑存在局限——会将这类资源文件放到*.data/purelib目录下。
  • Anaconda使用的pip 23.3.1属于较新版本,配合更新的wheel/setuptools,已经修复了这个逻辑问题,会正确将package_data中的文件直接放在对应包目录(pyfoo/)下。

解决方法

方法1:升级Ubuntu环境的工具链(推荐)

直接升级pip、wheel、setuptools到最新版本,就能让Ubuntu环境的打包行为和Anaconda/manylinux保持一致:

pip install --upgrade pip wheel setuptools

升级后重新执行pip wheel .,资源文件就会被正确放在pyfoo/目录下。

方法2:规范package_data路径写法(可选)

你当前package_data中写的./fooJSON路径带有./,虽然不影响功能,但属于非规范写法,建议改为相对于包目录的直接文件名,让配置更清晰:

package_data={
    'pyfoo' : ['fooJSON', 'fooJSON.exe'],
},

关于Ubuntu的特殊性

这不是Ubuntu系统本身的问题,只是它作为长期支持版本,自带的软件包版本偏稳定保守,pip/wheel版本滞后于最新版,才出现了这种打包行为差异。只要升级工具链,就能消除这种区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:05:59