- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Python 在可用于打包和描述项目的工具方面有着令人困惑的历史:这些工具包括标准库中的 distutils
、distribute
、distutils2
和 setuptools
(可能还有更多)。 distribute
和 distutils2
似乎已停止使用,取而代之的是 setuptools
,这留下了两个相互竞争的标准。
据我了解,setuptools
提供了比 distutils
更多的选项(例如声明依赖项、测试等),但它并未包含在 Python 标准库中(目前?)。
Python 打包用户指南[ 1 ] 现在推荐:
Use
setuptools
to define projects and create Source Distributions.
并解释:
Although you can use pure
distutils
for many projects, it does not support defining dependencies on other projects and is missing several convenience utilities for automatically populating package metadata correctly that are provided bysetuptools
. Being outside the standard library, setuptools also offers a more consistent feature set across different versions of Python, and (unlikedistutils
),setuptools
will be updated to produce the upcoming “Metadata 2.0” standard formats on all supported versions.Even for projects that do choose to use
distutils
, when pip installs such projects directly from source (rather than installing from a prebuilt wheel file), it will actually build your project usingsetuptools
instead.
但是,查看各种项目的 setup.py 文件发现这似乎不是一个实际的标准。许多软件包仍然使用 distutils
并且那些支持 setuptools
的软件包经常将 setuptools
与 distutils
混合使用,例如通过后备导入:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
随后试图找到一种方法来编写可以由 setuptools
和 distutils
安装的安装程序。这通常包括各种容易出错的依赖项检查方法,因为 distutils
不支持 setup 函数中的依赖项。
为什么人们仍在努力支持 distutils
- setuptools
不在标准库中是唯一原因吗? distutils
的优点是什么,编写仅支持 setuptools
的 setup.py 文件有什么缺点。
最佳答案
看看这个 SO 问题。它很好地解释了所有的包装方法,并且可能在一定程度上帮助回答您的问题:Differences between distribute, distutils, setuptools and distutils2?
Distutils is still the standard tool for packaging in Python. It is included in the standard library (Python 2 and Python 3.0 to 3.3). It is useful for simple Python distributions, but lacks features. It introduces the distutils Python package that can be imported in your setup.py script.
Setuptools was developed to overcome Distutils' limitations, and is not included in the standard library. It introduced a command-line utility called easy_install. It also introduced the setuptools Python package that can be imported in your setup.py script, and the pkg_resources Python package that can be imported in your code to locate data files installed with a distribution. One of its gotchas is that it monkey-patches the distutils Python package. It should work well with pip. The latest version was released in July 2013.
所以,正如您所见,setuptools 应该比 distutils 更受欢迎,我知道您的问题来自哪里,但是我认为 distutils 不会很快失去支持,因为简单地说,它在许多情况下与一些流行的遗留程序。而且您可能知道在遗留程序中更改这些类型的东西可能会很痛苦,并且会带来很多问题,例如不兼容,这将导致开发人员不得不重写源代码。所以就是这样,而且 distutils 是标准 python 库的一部分,而 setuptools 不是。因此,如果您正在创建一个 Python 程序,那么在这个时代,请使用 setuptools,但请记住,如果没有 distutils,setuptools 将永远存在。
关于python - setuptools 与 distutils : why is distutils still a thing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337706/
我目前正在使用 centos 网络管理。我尝试将默认的 python 版本从 2 更改为 3。我已经完成了,您可以从下面的结果中看到: [root@srv ~]# which python /usr/
我无法在 ubuntu 中使用命令行安装 setuptools。我使用了“pip install setuptools”,但它显示错误: Exception: Traceback (most rece
我正在一台新的 Mac 上进行设置,我一直在嗡嗡作响,安装了 pip 和一些软件包。突然间,我尝试运行的每个 pip 命令都会抛出 Exception: Traceback (most recent
我赢了10场。运行时:。我遇到了这个错误:。似乎什么都没有帮助。我试着卸载蟒蛇,得到了一个成功的消息,但似乎有一些旧版本的痕迹仍然存在。我怎样才能完全抹去蟒蛇安装的所有痕迹?
安装时出现此错误。这会导致问题吗? 错误:tensorboard 2.0.2 要求 setuptools>=41.0.0,但您将拥有不兼容的 setuptools 40.6.2。 最佳答案 我刚刚做了
我的 pacakge 有 *.py 文件和 *.c 文件,*.py 文件使用 ctypes 导入共享库 从 c 源构建。 现在我遇到了如何编写 setup.py 的问题。 setup脚本需要将my_c
python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名(linux) / easy_install 包名(
我刚刚更新了一个包以使用 setuptools_scm,并发现 readthedocs 中的版本号错误。 http://sshuttle.readthedocs.org/en/v0.77/显示: Ve
我的项目有下面的包树 └── src | ├── mypkg1 | │ ├── module1.py | │ ├── module2.py | │ └── __in
我的项目有下面的包树 └── src | ├── mypkg1 | │ ├── module1.py | │ ├── module2.py | │ └── __in
我的 Python 模块包含一个外部脚本,用户可以从命令行执行该脚本。我希望用户能够一次性安装 Python 模块和脚本。使用setuptools,我尝试添加: scripts=['bin/mybin
我对 python 中的设置工具还不太熟悉。我最近向我的项目添加了一个依赖项并遇到了依赖项的问题。问题是: try: from setuptools import setup except I
假设我有一个 setuptools 项目依赖于 PyPi 包 A,1.0 版。 PyPi 包 B,1.0 版。 包 B 依赖于 A,v. 2.0。 在 Java 中,我必须排除 pom.xml 或类似
我有一个 Python 脚本,有几个外部依赖项,我想分发给同事。但是,我们需要定期修改此脚本,所以我不想安装本身(即复制到 site-packages)。据我所知,setuptools 似乎隐含地执行
我正在为一个 python 项目设置一个持续交付系统,我正在尝试弄清楚如何通过 egg_info 设置项目构建的整个版本字符串。 我正在使用 thoughtworks GO,它有一个名为 GO_PIP
我在 setup.py 中有以下内容: from setuptools import setup # ... setup( name='xml-boiler', version='0.
当我运行我的应用程序时,我的应用程序引擎日志给我这个错误: WARNING 2012-03-01 23:27:31,089 py_zipimport.py:139] Can't open zipfi
我正在使用 setuptools 打包一个 python 应用程序,通常运行 python setup.py install 并将所有内容打包到一个 egg 中并安装它。 问题是我希望将它安装为可编辑
我无法卸载设置工具。怎么会? $ sudo pip uninstall setuptools Can't uninstall 'setuptools'. No files were found to
我想支持一个界面,新开发人员只需运行 python setup.py test 即可运行我的所有测试。我认为这是合理的。 鉴于我在我的包中定义了几个“额外”(optional features wit
我是一名优秀的程序员,十分优秀!