Python包装:wheel vs tarball(tar.gz)

zom*_*pro 30 python packaging tar python-wheel

轮子在鸡蛋上的优势很明显(参见为什么不用鸡蛋?https://pypi.python.org/pypi/wheel).

然而,我并不完全清楚使用车轮的优点是什么tar.gz.我可能会遗漏一些明显的东西,比如"它们是一样的".我认为它们都可以直接使用pip(即使在Windows中),具有相似的尺寸,并且在打包时需要类似的工作.听起来像是在证明包装方法论时可能遇到的问题.

编辑:刚刚找到一个tar.gz可能比轮子更好的例子.CherryPy(https://pypi.python.org/pypi/CherryPy)仅为Python 3.x提供轮子,所以如果你想拥有一个本地存储库来为Python 2.7和3.x依赖项提供CherryPy,它似乎是存储tarball更有意义.它是否正确?(只是为讨论添加一些"基于案例"的理由)

brk*_*rk3 15

这对我来说(直接来自车轮PEP):

Python需要一种比sdist更容易安装的包格式.Python的sdist包由distutils和setuptools构建系统定义,需要运行任意代码来构建和安装,并重新编译代码,以便将其安装到新的virtualenv中.这种混合构建 - 安装的系统很慢,难以维护,并且阻碍了构建系统和安装程序的创新.

Wheel试图通过在构建系统和安装程序之间提供更简单的接口来解决这些问题.wheel二进制包格式使安装程序不必了解构建系统,通过在许多安装中分摊编译时间来节省时间,并且无需在目标环境中安装构建系统.

https://www.python.org/dev/peps/pep-0427/#rationale

注意我们所说的tarball是上面所谓的"sdists".


kar*_*rel 8

来自Python Wheels

轮子的优点

• 更快地安装纯python 和本机C 扩展包。
• 避免为安装执行任意代码。(避免 setup.py)
• 在 Windows 或 OS X 上安装 C 扩展不需要编译器。
• 为测试和持续集成提供更好的缓存。
• 创建.pyc 文件作为安装的一部分,以确保它们与所使用的python 解释器相匹配。
• 跨平台和机器的更一致的安装。

确保安装了轮子。

python3 -m pip install wheel
Run Code Online (Sandbox Code Playgroud)

  • @zom-pro:据我所知,轮子中的​​文件只是复制到位。sdist 存档中的文件使用 `setup.py` 进行处理——通常只是将它们复制到某处,但不必只是复制它们。所以从这个意义上说,轮子更简单。 (3认同)
  • 所有这些都是 tarball 无法做到的事情吗?(我可以很容易地说,你需要“额外”的 Linux 机器上的轮子软件,而 tarball 则不需要) (2认同)
  • 我并不总是知道 tarball 中的内容,即使通过打开存档,也并不总是知道 .whl 文件中的内容,该文件应该“正常工作”,这对我来说是一个很大的优势,当我使用 pip 时,通常并不“有效”。 (2认同)
  • 你能在这一点上再深入一点吗?在我看来,当我看到一个轮子和一个 tarball 时,两者的包装都用拉链拉在里面,并且包装上还有一些额外的魔力。即使我可以说,在 tarball 中我可以看到许可证,而我在轮子中找不到它(在制作商业软件时这是非常重要的一点)。两者都可能隐藏一些不受欢迎的东西,这就是为什么我没有得到“公正的工作”。(顺便说一句,我喜欢轮子,但我需要一个坚实的理由) (2认同)