将 /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?的主要内容,如果未能解决你的问题,请参考以下文章