【问题标题】:Converting /someone/else's/ .tar.gz package to a .whl?将 /someone/else's/ .tar.gz 包转换为 .whl?
【发布时间】:2020-03-16 18:50:38
【问题描述】:

我面临着一个非常缓慢的 Docker 构建过程,部分原因是我们一遍又一遍地构建和安装所有 Python 包。我非常想加快速度。

我已经从 PyPI 下载了这些包,所以我可以好好看看它们。我还将它们放在本地 pypiserver(实际上是两个)中,并确认我可以从那里安装它们。

包的扩展名是:

87 .whl    ............................................................
23 .tar.gz ................
 2 .zip    .

我在想,如果我将其中一些 .tar.gz(和 .zip's? 和 source .whl's?)转换为 manylinux 轮子,并将它们放在具有相同功能的本地 pypiserver 实例中,安装起来会快得多版本号。事实上,一个包往往无法随机编译 - 因此,如果成功,构建过程也应该更加可靠。

是否有(相对?)直接的过程来做这样的事情?也就是说,从 pypi 获取一个 .tar.gz(不是一个任意的 .tar.gz - 只有少数来自 pypi)并将其转换为二进制 manylinux .whl?

例如,可能在我们的 docker build 中最耗时的包是https://pypi.org/project/pycapnp/ 在我的 Linux Mint 19.1 笔记本电脑上构建和安装大约需要 80 秒。这是一个 .tar.gz。

谢谢!

【问题讨论】:

  • 该项目似乎在积极维护,也许您可​​以与维护者谈谈发布 manylinux 轮子?

标签: python linux pip pypi python-wheel


【解决方案1】:

我相信pip wheel 应该很简单。

【讨论】:

  • 哇,太好了。它真的很近。美中不足的是,我需要一些适用于 Debian-derivatives 和 Fedora-derivatives 的东西——所以我认为我需要 manylinux。 “pip wheel whatever.tar.gz”产生的东西在一个上安装和导入,但在另一个上安装并无法导入。
  • 这部分似乎并不简单。查看short intro here 和更多技术细节,请关注pypa/manylinux repository 等。但是......无论如何,您的容器中没有建造轮子吗?如果是,为什么不缓存它们并重用它们以缩短构建时间?
【解决方案2】:

执行此操作的方法是在兼容的manylinux Docker image(这取决于您要定位的体系结构)中下载并提取源分发(.tar.gz),然后使用python setup.py bdist_wheel 构建轮子。

https://github.com/pypa/python-manylinux-demo 有一个演示项目,它展示了如何使用 CI 自动执行此操作,您可能可以对其进行调整,甚至将其贡献回未发布构建发行版(轮子)的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多