packaging - 关于Setuptools和替代方案的问题

  显示原文与译文双语对照的内容

我最近在互联网上看到了一个不错的工具。 最近,我读了詹姆斯·贝内特的包装文章为什么没有人应该使用setuptools。 在 #python 自由节点从我的时候,我知道有一些灵魂谁绝对厌恶它。 我将在它们当中计算自己,但我确实使用它。

我已经使用setuptools来了解它的不足,我更喜欢一些东西。 我不特别喜欢egg格式以及它是如何部署的。 所有的setuptools问题,我还没有找到更好的选择。

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

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

如果我想使用pip switch, 什么样的变化我需要让自己摆脱easy_install依赖性? 所声明的依赖项在哪里? 我猜,我需要摆脱使用鸡蛋格式,并提供源版本。 如果是,如何生成egg-info目录? 或者我是否需要?

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

这将如何改变我提供的"开发"命令的使用? 我是不是应该用那个? 还有别的办法吗?

我基本上想得到我的开发工作流看起来像什么样子的图片。

在有人建议它之前,我不是在寻找OS-dependent解决方案。 我主要关心的是debianlinux,但deb包不是一个选项,原因伊恩Bicking轮廓

时间:

pip使用 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 verbosely ( 像 pip install -vv ),你会看到很多运行的命令,你可能会认出大多数。

首先,pip真的是新的。 在真实世界中,新的,不完整的,并且基本上是 un-tested 。

它显示了巨大的希望,但直到它可以做一切 easy_install/setuptools可以做到不可能赶在大路上,当然不是在公司。

easy_install/setuptools很大,而且很复杂- 这也冒犯了很多人。 不幸的是,这种复杂性有一个非常好的理由,就是它迎合了大量不同的use-cases 。 我自己支持一个大(> 300 ) 桌面用户,加上一个相似大小的网格与频繁更新应用程序。 我们可以通过允许每个用户安装来实现这一点的想法是荒谬的- egg已经证明自己是一个可靠的方式来分发我的项目。

我的建议:学习使用 setuptools - 它真的是一件很棒的事情。 大多数憎恨它的人不理解它,或者根本没有use-case作为full-featured分发系统。

:- )

我正在用 2014年04月 写这个。 注意任何关于 python 打包,分发或者安装的日期。 看起来好像有一些减少了 factiousness,改进了实现,PEP-standardizing和前端的统一,比如,三年。

例如 python 打包机构是"一个工作组,它维护 python 打包中的许多相关项目。"

python.orgpython 包装用户指南工具建议python 包装未来的部分。

distributesetuptools的一个分支,在 2013年06月 remerged 。 指南说,"使用 setuptools 来定义项目和创建源发行版。"

在 PEP 453和 python 3.4中,指南推荐,"使用 pip 从PyPI安装 python 软件包,"和 pip 包含在 python 3.4中,并被 pyvenv 安装在virtualenvs中,这也包括在。 你可能会发现 PEP 453"基本原理"部分感兴趣。

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

我很高兴我阅读了以下技术/semi-political历史。

Martijn Faassen在 2009中: python 打包的历史。

以及 Armin Ronacher在 2013年06月 ( 标题不严重) 中: python 包装:,,everywhere

...