Python就可以用于包装和说明项目工具混淆历史:这些包括distutils
标准库中,distribute
,distutils2
,和setuptools
(也许更多)。看来,distribute
并distutils2
投票赞成的停产setuptools
,这让两个相互竞争的标准。
据我所知,setuptools
提供了更多的选择(例如,声明依赖项,测试等)distutils
,但是它没有包含在Python标准库中(还可以吗?)。
现在推荐《Python打包用户指南》 [ 1 ]:
使用
setuptools
定义的项目和创建源代码分发。
并说明:
尽管您可以将pure
distutils
用于许多项目,但它不支持定义对其他项目的依赖关系,并且缺少一些便捷实用程序来自动正确填充所提供的包元数据setuptools
。在标准库之外,setuptools还为不同版本的Python提供了更一致的功能集,并且(与不同distutils
)setuptools
将进行更新,以在所有受支持的版本上生成即将到来的“ Metadata 2.0”标准格式。即使对于确实选择使用的项目
distutils
,当pip直接从源代码(而不是从预构建的wheel文件安装)安装此类项目时,它实际上也会使用setuptools
来构建您的项目。
但是,查看各种项目的setup.py文件可以发现,这似乎并不是一个实际的标准。许多软件包仍在使用,distutils
而那些支持的软件包则setuptools
经常setuptools
与distutils
回退导入结合使用:
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
然后尝试找到一种写可以由setuptools
和安装的安装程序的方法distutils
。由于distutils
不支持设置功能中的依赖关系,因此通常包括各种容易出错的依赖关系检查方式。
人们为什么还要付出额外的努力来支持distutils
- setuptools
标准库中没有的事实是唯一的原因吗?distutils
编写仅支持setup.py文件的优点和缺点是什么setuptools
?
setuptools
是一种增强的替代方法,distutils
但请注意,“ 即使脚本本身仅导入,推荐的pip安装程序也可以使用运行所有setup.py脚本setuptools
distutils
”(源)
distutils
已被合并回setuptools
,但是有一些旧应用程序被编写为可以使用,distutils
并且迁移到正确的标准涉及成本。