关于Setuptools和替代品的问题

时间:2008-12-15 15:06:49

标签: python packaging setuptools pip

我最近看到了很多关于互联网的安装工具。最近,我阅读了James Bennett的On packaging帖子,了解为什么没有人应该使用setuptools。从我在Freenode的#python时代开始,我知道那里有一些人绝对厌恶它。我会把自己算在他们中间,但我确实使用它。

我已经将setuptools用于足够多的项目以了解它的不足之处,我宁愿选择更好的东西。我并不特别喜欢鸡蛋格式以及它是如何部署的。由于所有setuptools的问题,我还没有找到更好的选择。

我对像pip这样的工具的理解是,它意味着是一个easy_install替代品(不是setuptools)。实际上,pip使用了一些setuptools组件,对吗?

我的大多数软件包都使用了setuptools-aware的setup.py,它声明了所有依赖项。当他们准备好了,我将构建一个sdist,bdist和bdist_egg,并将它们上传到pypi。

如果我想切换到使用pip,我需要做些什么样的更改才能摆脱easy_install依赖?声明的依赖项在哪里?我猜我需要摆脱使用egg格式,并提供源代码分发。如果是这样,我如何生成egg-info目录?或者我甚至需要?

这会如何改变我对virtualenv的使用? virtualenv不使用easy_install来管理环境吗?

这会如何改变我对“开发”命令提供的setuptools的使用?我不应该使用它吗?有什么替代方案?

我基本上试图了解我的开发工作流程的样子。

在有人建议之前,我不是在寻找依赖于操作系统的解决方案。我主要关注debian linux,但deb包不是一个选项,因为Ian Bicking概述here

3 个答案:

答案 0 :(得分:25)

pip使用Setuptools,不需要对包进行任何更改。它实际上使用以下命令安装包含Setuptools的软件包:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

因为它使用该选项(--single-version-externally-managed),它不会将鸡蛋作为zip文件安装,不支持多个同时安装的软件版本,并且软件包是平面安装的(如python setup.py install如果你只使用distutils就可以工作。仍然安装了Egg元数据。 pip也像easy_install一样,下载并安装包的所有要求。

此外您还可以使用需求文件添加应该批量安装的其他软件包,并使版本要求更加准确(不要在{{1}中添加这些确切的要求}文件)。但是如果你不创建需求文件,那么你就像使用easy_install一样使用它。

对于你的setup.py我不建议做任何更改,除非你一直试图在那里创建非常精确的要求。我认为在install_requires文件中有关版本的准确性有限,因为您无法真正了解新库的未来兼容性,我建议您不要尝试预测这个。需求文件是制定保守版本要求的替代位置。

您仍然可以使用setup.py,事实上如果您执行python setup.py develop,它会检查出来(进入pip install -e svn+http://mysite/svn/Project/trunk#egg=Project)并在其上运行src/project。所以工作流程并没有任何不同。

如果你详细地运行pip(如setup.py develop),你会看到很多运行的命令,你可能会认识到它们中的大多数。

答案 1 :(得分:3)

我是在2014年4月写的。请注意有关Python包装,分发或安装的任何文章的日期。在过去的三年里看起来似乎已经有了一些减少的便利性,实施的改进,PEP的标准化以及前沿的统一。

例如,Python Packaging Authority是“一个维护Python包装中许多相关项目的工作组。”

python.org Python Packaging User Guide包含Tool RecommendationsThe Future of Python Packaging部分。

distributesetuptools的一个分支,于2013年6月重新出现。指南说,“使用setuptools定义项目并创建源分发。”

从PEP 453和Python 3.4开始,指南建议“使用pip从PyPI安装Python包”,并且pip包含在Python 3.4中,并由{{1}安装在virtualenvs中},也包括在内。您可能会发现PEP 453 "rationale" section很有趣。

指南中还提到了新工具和新工具,包括wheelbuildout

我很高兴看到以下两个技术/半政治历史。

Martijn Faassen在2009年:A History of Python Packaging

由Armin Ronacher于2013年6月(标题不严重):Python Packaging: Hate, hate, hate everywhere

答案 2 :(得分:2)

首先,pip真的很新。在现实世界中新的,不完整的并且在很大程度上未经测试。

它显示了很大的希望但是直到它能够做到easy_install / setuptools可以做的所有事情,它不可能大大地发挥作用,当然不是在公司中。

Easy_install / setuptools既大又复杂 - 这让很多人感到不快。不幸的是,这种复杂性的一个非常好的理由是它迎合了大量不同的用例。我自己支持大型(> 300)桌面用户池,以及具有频繁更新的应用程序的类似大小的网格。我们可以通过允许每个用户从源代码安装来实现这一目标的想法是荒谬的 - 鸡蛋已证明自己是分发我的项目的可靠方式。

我的建议:学会使用setuptools - 这真的很棒。大多数讨厌它的人都不理解它,或者根本就没有用作全功能分发系统的用例。

: - )