将 /someone/else's/ .tar.gz 包转换为 .whl?

Posted

技术标签:

【中文标题】将 /someone/else\'s/ .tar.gz 包转换为 .whl?【英文标题】: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 ***? 【参考方案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 自动执行此操作,您可能可以对其进行调整,甚至将其贡献回未发布构建发行版(***)的项目。

【讨论】:

以上是关于将 /someone/else's/ .tar.gz 包转换为 .whl?的主要内容,如果未能解决你的问题,请参考以下文章

流星面板备份数据

linux 打压缩包

linux压缩和解压缩命令大全

Linuxlinux压缩和解压缩命令大全

linux压缩和解压缩命令大全

nginx安装