如何通过pip下载跨平台的wheel包?
我习惯先用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。