【问题标题】:Questions about Setuptools and alternatives关于设置工具和替代品的问题
【发布时间】:2010-09-26 23:40:51
【问题描述】:

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

我已经在足够多的项目中使用了 setuptools,以了解它的不足之处,我更喜欢更好的东西。我不是特别喜欢 egg 格式及其部署方式。对于 setuptools 的所有问题,我还没有找到更好的选择。

我对@9​​87654322@ 之类的工具的理解是,它是一个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

【问题讨论】:

  • setuptoolsdistutilsdistutils2pip的一些历史,和朋友讨论here

标签: python packaging setuptools pip


【解决方案1】:

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

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

python.org Python Packaging User GuideTool RecommendationsThe Future of Python Packaging 部分。

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

从 PEP 453 和 Python 3.4 开始,该指南建议“使用 pip 从 PyPI 安装 Python 包”,并且 pip 包含在 Python 3.4 中,并由 pyvenv 安装在 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】:

    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 一样,下载和安装包的所有要求。

    此外您还可以使用需求文件来添加应批量安装的其他软件包,并使版本要求更加准确(无需将这些确切要求放入您的 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),您会看到很多正在运行的命令,并且您可能会识别其中的大部分。

    【讨论】:

    • 我想了解更多关于“此外,您还可以使用需求文件添加其他应批量安装的软件包,并使版本要求更准确”。
    【解决方案3】:

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

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

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

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

    :-)

    【讨论】:

    • 老实说,我觉得我对 setuptools 相当了解。有一些抱怨......主要是它如何处理egg文件的部署。它现在对我来说已经足够好了,但是 python 社区中有很多人(我尊重他们的意见)根本不会碰它。
    • 虽然 pip 是新的,但如果它适合你,那么它也适合你——它并不是非常微妙。大多数情况下,它与 easy_install 类似,它查找包、下载它们并安装它们(通过调用 python setup.py install 或 python setup.py develop 如果你使用 -e)。
    • setuptools,未维护,不支持python 3。可能被distribute取代
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多