轮子相对于鸡蛋的优势是显而易见的(请参阅为什么不是鸡蛋?https://pypi.python.org/pypi/wheel部分)。
但是,我并不完全清楚使用轮子相对于
tar.gz
有什么优势。我可能会遗漏一些明显的东西,比如“它们是相同的”。
据我所知,两者都可以使用 pip
直接安装(即使在 Windows 中),具有相似的大小,并且打包时需要类似的工作。
在我看来,这就像您在证明包装方法的合理性时可能会遇到的问题。
编辑: 刚刚找到一个例子,其中
tar.gz
可能比轮子更好。 CherryPy (https://pypi.python.org/pypi/CherryPy) 只为 Python 3.x 提供轮子,所以如果你想有一个本地存储库为 CherryPy 提供 Python 2.7 和 3.x 依赖项,似乎使存储 tarball 更有意义。这是正确的吗? (只是为了在讨论中添加一些“基于案例”的理由)
这为我解答了(直接来自轮子 PEP):
Python需要一种比sdist更容易安装的包格式。 Python 的 sdist 包由 distutils 和 定义并需要 setuptools 构建系统,运行任意代码来构建和安装, 并重新编译,编码以便可以安装到新的 虚拟环境。这种混合构建-安装的系统速度很慢,很难 维护并阻碍构建系统和安装程序的创新。
Wheel 试图通过提供更简单的方法来解决这些问题 构建系统和安装程序之间的接口。轮二进制 包格式使安装程序不必了解构建 系统,通过在多次安装中分摊编译时间来节省时间, 并消除了在目标中安装构建系统的需要 环境。
https://www.python.org/dev/peps/pep-0427/#rationale
请注意,我们所说的 tarball 就是上面所说的“sdists”。
来自Python轮子
轮子的优点
• 更快地安装纯Python 和本机C 扩展包。
• 避免安装时任意执行代码。 (避免 setup.py)
• 安装 C 扩展不需要 Windows 或 OS X 上的编译器。
• 允许更好的缓存以进行测试和持续集成。
• 创建 .pyc 文件作为安装的一部分,以确保它们与所使用的 python 解释器匹配。
• 跨平台和机器的安装更加一致。
确保安装了轮子。
python3 -m pip install wheel