设置工具、分发和 pip 如何相互关联



我一直在通过"Learn Python The Hard Way"(第2版(一书自学Python。 在练习 46 中,它告诉我阅读 Pip、Distributed 和其他一些包。

pip 的文档足够清晰。 它允许我安装/卸载和升级软件包。 阅读分发文档,它基本上似乎做了同样的事情:

轻松下载、构建、安装、升级和卸载 Python 包

点和分配之间有什么区别,它们之间有什么关系?

[2014-10 TL;DR: distribute已死,请使用 pip 、新setuptools,对于二进制分发,wheels 。 更多内容见下文。


[原答案]

Distributed

旧版安装工具的一个分支,因此几乎所有后续注释都同样适用于 Distributed 和 setuptools。 Setuptools试图填补更旧的Python标准库包Distutils中的许多漏洞。 Setuptools添加了诸如通过命令行界面自动下载软件包,easy_install和某种程度的依赖项管理等功能。 然而,Python社区的一部分人认为setuptools太侵入性了,并且对于它的某些功能有太多的幕后魔力。

pip 是位于 setuptools 或 Distributed 之上的更高级别接口。 它使用它们来执行其许多功能,但避免了一些更具争议性的功能,例如拉链鸡蛋。 pip还提供了setuptools中没有的功能,例如卸载命令以及定义固定需求集和可靠地复制一组软件包的能力。 这里有一个更完整的功能比较。

为什么有这么多组件(还有更多,比如buildout(? 很多原因:解决方案必须在支持Python的所有主要平台上工作(即Unix-y,Windows,Mac OS X(,因此构建和安装会带来一系列复杂的问题;像许多开源项目一样,Python 本质上是全志愿者的,许多开发人员对打包和安装问题并不感兴趣;有一种自然的保守主义,认为向标准库中添加主要的未经证实的新功能;意见分歧等。

目前,有一个项目正在进行中,以提供Distutils的替代品,并可能为一些更高级别的附加组件提供替代品。 它计划作为packaging包在Python 3.3标准库中发布,并作为旧版本的Python的附加组件作为Distutils2发布。

总而言之,当前的关系是:

pip -> [ setuptools | Distribute ] -> Distutils -> Python core
                                    |
    3rd party packages              |      included in Python
                                    |

更新(2012-07(:在Python 3.3的功能代码截止之前,决定packaging尚未准备好在标准库中发布,因此已将其从3.3版本中删除。 通过 PyPI 提供Distutils2的工作将继续进行,以及 Python 3.4 标准库中将包含的内容。


更新

(2014-10(:自从这个答案上次更新以来,Python打包的世界发生了进一步的变化。

  • 最重要的是,自2013年年中以来,setuptoolsdistribute已痊愈,开发活动已合并进入一个新的setuptools项目。 现在distribute已弃用且不再维护;改用新setuptools但不要使用其easy_install作为安装程序。

  • pip已经成为事实上和受祝福的安装程序工具(对于 Python平台的包管理器未另行提供的包(在虚拟环境内部或外部(virtualenvpyvenv(。

  • 而不是旧的setuptools bdist eggswheels有成为 Python 包的祝福二进制分发格式。

  • 从Python 3.4开始,支持wheelpip版本现在附带官方python.org二进制安装程序和源包,预计pip也将包含在 Python 2.7 (2.7.9( 的下一个维护版本中。

  • Distutils2packaging现在处于休眠状态。

更多详细信息,请参阅 Python 3 文档的新分发 Python 模块部分和新的 Python 打包用户指南。

相关内容

  • 没有找到相关文章

最新更新