如何通过pip下载跨平台的wheel包?

26 投票
2 回答
35819 浏览
提问于 2025-04-18 08:58

我习惯先用Pip下载一些软件包,然后把它们复制到目标机器上去安装。不过现在有了新的Python Wheels,我不得不使用“pip ... --no-use-wheel”这个命令,因为有些下载的软件包是特定于某个平台的(我在OSX上开发,但要在Debian上部署),这些软件包在目标机器上无法安装。请问有没有办法下载适合目标平台的Wheels(或者是平台无关的)呢?

2 个回答

3

实现这个目标最简单的方法就是用一个自定义脚本。

你可以通过 simple 接口访问整个 PyPI 索引。如果你感兴趣的包提供了一个或多个轮子(也就是预编译的包),它们会在同一个地址加上 /<package-name> 的地方列出。

举个例子:如果你想安装 setuptools,所有的轮子都会在这里列出: https://pypi.python.org/simple/setuptools/

在你的脚本中,记得按照 PEP-425 的建议来实现标签优先级。简单来说,就是下载最具体的(而不是最一般的)版本的包,因为这通常会带来性能上的好处,比如用 C 扩展替代纯 Python 实现的一些算法。

37

现在,pip download 命令新增了一个 --platform 参数,你可以用它来指定你想要的操作平台:

pip download --platform=manylinux1_x86_64 --only-binary=:all: lxml
  • 使用 --platform=manylinux1_x86_64 选项表示你想要为这个特定平台下载安装包。manylinux1_x86_64 大致意思是“与大多数Linux发行版兼容,并且适用于Intel CPU架构”。这个回答链接了一些PEP文档,描述了有哪些平台以及它们与哪些操作系统和CPU兼容。
  • 使用 --only-binary=:all: 强制使用二进制分发包(也就是安装包,跟源代码分发包相对)来安装这个命令中所有的内容。你也可以用逗号分隔的特定分发包列表来替代 :all:;想了解更多信息,可以查看 pip install --help

注意:我使用“分发包”这个词是为了避免和另一种“包”(可以在Python脚本中用 import 导入的包)混淆。

补充:manylinux1 从2022年1月1日起已经停止维护(EOL)。请使用更新的版本 - 查看manylinux的 README.md

撰写回答