21

我最近在互联网上看到了大量的 setuptools。最近,我阅读了 James Bennett 的关于为什么没有人应该使用 setuptools的关于包装的帖子。从我在 Freenode 上的#python 开始,我就知道那里有一些人绝对讨厌它。我会把自己算在其中,但我确实使用它。

我已经将 setuptools 用于足够多的项目以了解它的不足之处,我更喜欢更好的东西。我不是特别喜欢 egg 格式及其部署方式。对于所有 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在这里概述。

4

3 回答 3

26

pip 使用 Setuptools,并且不需要对包进行任何更改。它实际上使用 Setuptools 安装软件包,使用:

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

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

此外,您还可以使用需求文件来添加应批量安装的其他软件包,并使版本要求更准确(无需将这些确切要求放入您的setup.py文件中)。但是,如果您不制作需求文件,那么您将像 easy_install 一样使用它。

对于您install_requires,我不建议您进行任何更改,除非您一直在尝试在那里创建非常精确的要求,这些要求已知是好的。我认为您在有关版本的文件中的有用程度是有限的setup.py,因为您无法真正知道新库的未来兼容性会是什么样子,我不建议您尝试预测这一点。需求文件是布置保守版本需求的替代位置。

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

如果您详细运行 pip(如pip install -vv),您会看到很多正在运行的命令,并且您可能会识别其中的大部分。

于 2008-12-15T23:29:35.803 回答
3

我在 2014 年 4 月写这篇文章。请注意任何关于 Python 打包、分发或安装的日期。看起来,在过去的三年里,派别性有所减少,实施有所改进,PEP 标准化和战线统一。

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

python.org Python 打包用户指南包含工具推荐和Python 打包的未来部分。

distribute是其中的一个分支setuptools,于 2013 年 6 月重新合并。指南说,“setuptools用于定义项目和创建源分布。”

从 PEP 453 和 Python 3.4 开始,该指南建议“用于pip从 PyPI 安装 Python 包”,并pip包含在 Python 3.4 中,并通过 安装在 virtualenvs 中pyvenv,也包括在内。您可能会发现PEP 453 “基本原理”部分很有趣。

指南中还提到了一些新的和新的工具,包括wheelbuildout.

我很高兴我阅读了以下两个技术/半政治历史。

Martijn Faassen 在 2009 年:Python 打包的历史

并由 Armin Ronacher 于 2013 年 6 月撰写(标题并不严肃):Python Packaging: Hate,hate,hate无处不在

于 2014-04-18T19:00:46.557 回答
2

对于初学者来说,pip 真的很新。新的,不完整的,在现实世界中很大程度上未经测试。

它显示出巨大的希望,但直到它可以完成 easy_install/setuptools 可以做的所有事情之前,它不太可能在很大程度上流行起来,当然不会在公司中流行起来。

Easy_install/setuptools 又大又复杂——这冒犯了很多人。不幸的是,这种复杂性有一个很好的理由,那就是它可以满足大量不同的用例。我自己的支持大型(> 300)桌面用户池,以及具有经常更新的应用程序的类似大小的网格。我们可以通过允许每个用户从源代码安装来做到这一点的想法是可笑的——eggs 已经证明它们是分发我的项目的可靠方式。

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

:-)

于 2008-12-15T18:24:26.417 回答