2024-04-17 23:10:28 发布
网友
我一直在通过《艰难学习Python》(第二版)一书自学Python。在练习46中,它告诉我阅读Pip、Distribute和其他一些包。
pip的文档已经足够清楚了。它允许我安装/卸载和升级软件包。阅读要分发的文档时,它基本上似乎做了相同的事情:
Easily download, build, install, upgrade, and uninstall Python packages
pip和distribute之间有什么区别,它们是如何相互联系的?
[2014-10年TL;DR:distribute已经死了,使用pip,新的setuptools,对于二进制分布,wheels。更多内容请参见下文。]
distribute
pip
setuptools
wheels
[原始答案]
Distributeis是较早的setuptools的分支,因此几乎所有随后的注释都同样适用于分发和设置工具。Setuptools试图填补更老的Python标准库包Distutils中的一些漏洞。Setuptools添加了一些功能,比如通过命令行界面自动下载包,easy_install,以及某种程度的依赖管理。然而,Python社区的一部分人认为setuptools过于侵入性,对于其某些特性来说有太多的幕后魔力。
easy_install
pip是一个位于setuptools或Distribute之上的高级接口。它使用它们来执行许多功能,但避免了一些更具争议性的功能,如压缩鸡蛋。pip还提供了setuptools中不可用的功能,比如卸载命令,以及定义固定需求集和可靠地复制一组包的能力。这里有一个更完整的特性比较here。
为什么有那么多组件(还有更多的组件,比如^{})?原因很多:解决方案必须在支持Python的所有主要平台(即Unix-y、Windows、Mac-OS X)上运行,因此构建和安装会带来一系列复杂的问题;就像许多开源项目一样,Python本质上都是自愿的,许多开发人员对打包和安装问题并不是那么感兴趣;在标准库中添加一些未经验证的主要新特性时,存在着一种自然的保守主义;意见分歧等等
目前,有一个项目正在进行中,为Distutils和一些更高级别的插件提供替代品。它计划作为^{}包在Python 3.3标准库中发布,并作为较旧版本Python的^{}的附加组件发布。
总而言之,目前的关系是:
pip -> [ setuptools | Distribute ] -> Distutils -> Python core | 3rd party packages | included in Python |
更新(2012-07):在Python 3.3的特性代码截止之前,决定packaging尚未完全准备好在标准库中发布,因此它已从3.3版本中删除。工作将继续进行Distutils2,这可以通过PyPI获得,并将包括在Python 3.4的标准库中。
packaging
Distutils2
更新(2014-10):自上次更新此答案以来,Python打包的世界发生了进一步的变化。
最重要的是,自2013年年中以来 distribute已经愈合,并有发育活性。distribute现在 已弃用且不再维护;请改用新的setuptools 但不要使用它的easy_install作为安装程序。
pip已经成为事实上的、受祝福的安装工具(对于Python 不是由平台的包管理器提供的包) 在虚拟环境内或外部(^{}或^{})。
与以前的setuptoolsbdisteggs不同,^{}have 成为Python包的受祝福的二进制分发格式。
eggs
As of Python 3.4,a version of ^{}支持wheel 现在随正式的python.org二进制安装程序和 源包,预计pip也将 包含在next maintenance release of Python 2.7(2.7.9)中。
wheel
python.org
Distutils2和packaging现在处于休眠状态。
Python 3文档的新Distributing Python Modules部分和新的Python Packaging User Guide中有更多详细信息。
[2014-10年TL;DR:
distribute
已经死了,使用pip
,新的setuptools
,对于二进制分布,wheels
。更多内容请参见下文。][原始答案]
Distribute
is是较早的setuptools的分支,因此几乎所有随后的注释都同样适用于分发和设置工具。Setuptools试图填补更老的Python标准库包Distutils中的一些漏洞。Setuptools添加了一些功能,比如通过命令行界面自动下载包,easy_install
,以及某种程度的依赖管理。然而,Python社区的一部分人认为setuptools过于侵入性,对于其某些特性来说有太多的幕后魔力。pip
是一个位于setuptools或Distribute之上的高级接口。它使用它们来执行许多功能,但避免了一些更具争议性的功能,如压缩鸡蛋。pip
还提供了setuptools
中不可用的功能,比如卸载命令,以及定义固定需求集和可靠地复制一组包的能力。这里有一个更完整的特性比较here。为什么有那么多组件(还有更多的组件,比如^{} )?原因很多:解决方案必须在支持Python的所有主要平台(即Unix-y、Windows、Mac-OS X)上运行,因此构建和安装会带来一系列复杂的问题;就像许多开源项目一样,Python本质上都是自愿的,许多开发人员对打包和安装问题并不是那么感兴趣;在标准库中添加一些未经验证的主要新特性时,存在着一种自然的保守主义;意见分歧等等
目前,有一个项目正在进行中,为Distutils和一些更高级别的插件提供替代品。它计划作为^{} 包在Python 3.3标准库中发布,并作为较旧版本Python的^{} 的附加组件发布。
总而言之,目前的关系是:
更新(2012-07):在Python 3.3的特性代码截止之前,决定
packaging
尚未完全准备好在标准库中发布,因此它已从3.3版本中删除。工作将继续进行Distutils2
,这可以通过PyPI获得,并将包括在Python 3.4的标准库中。更新(2014-10):自上次更新此答案以来,Python打包的世界发生了进一步的变化。
最重要的是,自2013年年中以来
distribute
已经愈合,并有发育活性。distribute
现在 已弃用且不再维护;请改用新的setuptools
但不要使用它的easy_install
作为安装程序。pip
已经成为事实上的、受祝福的安装工具(对于Python 不是由平台的包管理器提供的包) 在虚拟环境内或外部(^{与以前的} have
成为Python包的受祝福的二进制分发格式。
setuptools
bdisteggs
不同,^{As of Python 3.4,a version of ^{} 支持
wheel
现在随正式的python.org
二进制安装程序和 源包,预计pip
也将 包含在next maintenance release of Python 2.7(2.7.9)中。Distutils2
和packaging
现在处于休眠状态。Python 3文档的新Distributing Python Modules部分和新的Python Packaging User Guide中有更多详细信息。
相关问题 更多 >
编程相关推荐