【问题标题】:How to download cross-platform wheels via pip?如何通过 pip 下载跨平台轮子?
【发布时间】:2014-07-28 15:06:05
【问题描述】:

我习惯于使用 Pip 预下载包,然后将它们复制到目标机器进行部署。使用新引入的 Python Wheels,我不得不“pip ... --no-use-wheel”,因为一些下载的包是特定于平台的(我正在 OSX 上开发并部署到 Debian)并且不会安装在目标机器上。有没有办法为目标平台(或独立于平台)下载 Wheels?

【问题讨论】:

  • 我编辑了您的问题标题,因为我认为 cross-platform(让人想起 cross-compilation 更好地解释了您想要实现的目标:在平台 A 上为不同的平台 B 创建二进制包(相反改为建议创建“通用”包的原始标题,顺便说一句,如果包中已编译代码,则可能无法实现)。

标签: python pip setuptools python-wheel


【解决方案1】:

pip download 命令现在具有--platform 参数,您可以使用它来指定所需的平台:

pip download --platform=manylinux1_x86_64 --only-binary=:all: lxml
  • --platform=manylinux1_x86_64 选项表示您需要此特定平台的轮子。 manylinux1_x86_64 大致意思是“与大多数发行版和英特尔 CPU 架构兼容”。 This answer 链接到一些 PEP,这些 PEP 描述了存在哪些平台以及它们与哪些操作系统/CPU 兼容。
  • --only-binary=:all: 强制使用二进制分发包(即轮子,与 sdist “源分发包”相对)用于“:all:”将在此命令中安装的东西。代替:all:,可以传递一个以逗号分隔的特定分发包列表;请参阅pip install --help 了解更多信息。

注意:我使用术语“分发包”以避免与其他类型的“包”混淆(可以在 python 脚本中import)。

【讨论】:

  • 为什么有些包没有匹配的发行版?如pip download --only-binary=:all: --platform=manylinux1_x86_64 tornado。如何下载这些包?
  • @SiminJie 并不是所有的包都有作为轮子可用的所有发行版,但我确信包维护者会接受贡献来解决这个问题 ;-)
  • 各个选项的用途是什么? (我想从这篇文章中学到一些东西。)
【解决方案2】:

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

您可以通过simple接口访问整个PyPI索引,如果感兴趣的包提供一个或多个轮子,它们将列在同一地址+/<package-name>

例如:如果您要安装setuptools,所有轮子都将列在:https://pypi.python.org/simple/setuptools/

在您的脚本中,请记住实现PEP-425 指定的推荐标签优先级。本质上,这归结为下载最具体(而不是最通用)版本的包,因为这通常会转化为性能优势,例如 C 扩展替换某些算法的纯 python 实现。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2011-12-30
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多