2017-02-23 67 views
2

当我需要一个Python库时,我使用pip从PyPi中获取它,如果我创建了一个项目并想共享它,我只需要具有setup.py文件,这将使它易于安装。因此,我想知道鸡蛋或轮子包装的用途是什么。为什么我们需要蟒蛇包装(例如鸡蛋)?

+0

我知道它是什么。我不明白它的需要,因为编译概念不适用于python,因为它适用于例如C或java。 –

回答

2

Python Packaging User Guide不得不说关于这一主题的以下内容:

轮和蛋是旨在支持需​​要一个安装工件,不需要建设或编译的使用情况下,两个包装形式,这在测试和生产工作流程中可能是昂贵的。

这些格式可用于分发包含二进制扩展模块的包。否则需要在安装过程中进行编译。

如果没有编制涉及一个source distribution在原则上是足够的,但是用户指南还建议创建性能原因轮:

至少,你应该创建一个源代码发布:

python setup.py sdist

“源代码发布”是未构建的(即,它不是构建发行版),并且需要通过pip安装时的构建步骤。 即使该分发版本是纯Python(即不包含扩展名),它仍然涉及构建步骤以从setup.py构建安装元数据。

[...]

您还应该为您的项目创建一个轮子。轮子是一个可以安装而不需要经过“构建”过程的构建包。对于最终用户来说,安装车轮比从源代码分发系统安装要快得多。

简而言之,软件包是一个方便的东西 - 主要是为用户。

Wheel包统一了分发和安装包含纯python,平台相关代码或编译扩展的项目的过程。用户不需要担心程序包是用Python编写的还是用C编写的 - 它只是起作用。

+0

谢谢,但通常我使用的所有项目都只有配置文件和python脚本,因此不需要编译。因此,我认为包装不是通常使用或需要的东西(至少在我的情况下) –

+0

谢谢!我的问题是回答:) –

1

鸡蛋包是一个较旧的标准,你应该忽略它们。使用pip install .而不是./setup.py install来防止创建它们。 (附录:它们也是变相的.zip,Python从中读取包数据 - 不完全是性能最高的解决方案)

另一方面,车轮包是新标准。它们允许为Windows,macOS和Linux创建可移植的二进制包。现在,你可以做pip install PyQt5(作为例子),它只会工作,系统上不需要C++编译器和Qt库。一切都预先编译并包含在方向盘中。非二进制包也会受益,因为不运行setup.py(所有元数据都在轮子中)更安全。 (附录:那些也是.zip s,但是它们在安装时解包)

+0

谢谢。但是,如果我的项目只包含python脚本和配置文件,wheel包不会带来任何好处,对吧? –

+0

@ M.Buil http://pythonwheels.com/ - *避免安装时执行任意代码。 (避免setup.py)。创建.pyc文件作为安装的一部分,以确保它们与使用的python解释器匹配。跨平台和机器的更一致的安装。* –