如何将pip安装但未上传PyPI的Python包逆向构建为wheel
已安装Python包逆向构建wheel操作指南
前置依赖安装
首先确保当前操作的Python环境安装了wheel工具:
pip install wheel
常规打包方案(推荐)
绝大多数通过pip正常安装的包,直接执行以下命令即可生成对应wheel,无需提前查找包路径:
pip wheel --no-deps <目标包名> -w <wheel输出目录>
以你场景中的my_package为例,将生成的wheel存放到当前目录的wheels文件夹下,命令如下:
pip wheel --no-deps my_package -w ./wheels
参数说明:
--no-deps:跳过依赖包的打包流程,仅生成你指定的目标包的wheel文件-w:指定生成的wheel文件的存储路径
特殊场景打包方案(元信息缺失时使用)
如果上述命令执行报错,一般是包的安装元信息不完整,你可以手动定位包路径后通过wheel的pack命令打包:
- 查找包的安装目录
pip show my_package | grep Location
输出的路径就是当前环境的site-packages目录,进入该目录后可以找到两个和目标包相关的目录:
- 包代码目录:一般和包名同名,比如
my_package - 包元信息目录:命名格式为
包名-版本号.dist-info或者包名.egg-info,比如my_package-0.0.1.dist-info
- 执行打包命令
在site-packages目录下执行以下命令即可生成wheel:
wheel pack my_package-0.0.1.dist-info
执行完成后当前目录就会生成对应的.whl文件。
验证与批量操作
有效性验证
生成wheel后可以通过安装测试验证是否可用:
pip install ./wheels/my_package-0.0.1-*.whl
安装完成后执行import my_package没有报错即说明打包成功。
批量打包
如果你需要一次性打包多个自定义包,可以通过管道命令批量处理:
# 按需过滤不需要打包的公共包,示例中排除了aiohttp和alembic pip list --format=freeze | grep -vE "aiohttp|alembic" | cut -d'=' -f1 | xargs -I {} pip wheel --no-deps {} -w ./wheels
注意:如果你的包包含C/C++等编译生成的二进制扩展,生成的wheel和当前操作系统、CPU架构、Python大版本强绑定,仅能在同配置的环境下安装使用,跨环境使用会出现兼容性报错。
内容的提问来源于stack exchange,提问作者Cord Kaldemeyer
相关产品推荐
相关产品推荐

