PEP 365 – 添加 pkg_resources 模块
- 作者:
- Phillip J. Eby <pje at telecommunity.com>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 主题:
- 打包
- 创建:
- 2007年4月30日
- 发布历史:
- 2007年4月30日
摘要
本 PEP 提出将 pkg_resources
模块的增强版本添加到标准库中。
pkg_resources
是一个用于查找和管理 Python 包/版本依赖项以及访问捆绑文件和资源(包括压缩的 .egg
文件中的资源)的模块。目前,pkg_resources
只能通过安装整个 setuptools
发行版来获得,但它不依赖于 setuptools 的任何其他部分;实际上,它包含 Python Eggs 的整个运行时支持库,并且本身也很有用。
此外,通过添加一项功能,此模块可以支持轻松引导安装多个 Python 包管理工具,包括 setuptools
、workingenv
和 zc.buildout
。
提案
本 PEP 并没有提议将 setuptools
包含在标准库中,而是仅提议将 pkg_resources
添加到 Python 2.6 和 3.0 的标准库中。 pkg_resources
比 setuptools 的其余部分稳定得多,在过去 12 个月里几乎没有添加任何新功能。
但是,本 PEP 还提议在将 pkg_resources
添加到标准库之前,为其添加一项新功能。具体来说,应该能够执行类似以下操作:
python -m pkg_resources SomePackage==1.2
以请求从 PyPI 下载并安装 SomePackage
。此功能 *不会* 替代 easy_install
;相反,它将依赖于 SomePackage
通过 PyPI XML-RPC API 列出用于下载的纯 Python .egg
文件,并且这些 egg 将放置在 $PYTHON_EGG_CACHE
目录中,在该目录中它们 *不会* 默认可导入。(并且不会安装任何脚本。)但是,如果下载的 egg 包含安装引导代码,则将有机会运行它。
这些限制将允许代码极其简单,但仍然功能强大,足以支持用户通过在命令行上提供工具的名称来下载诸如 setuptools
、workingenv
和 zc.buildout
等包管理工具。
基本原理
许多用户要求将 setuptools
包含在标准库中,以节省用户需要经历笨拙的引导过程。但是,大多数引导复杂性来自这样一个事实:setuptools 安装的代码无法使用 pkg_resources
运行时模块,除非 setuptools 已经安装。因此,安装 setuptools(从某种意义上说)需要 setuptools 已经安装。
其他 Python 包管理工具,如 workingenv
和 zc.buildout
,也存在类似的引导问题,因为它们都使用了 setuptools,但也希望为用户提供接近“一步安装”的功能。如果 pkg_resources
已经存在,并且能够从 PyPI 下载预打包的 egg,那么为这些工具以及将来出现的任何其他此类工具创建引导实用程序的复杂性将大大降低。
(这也意味着不需要安装 setuptools 即可简单地 *使用* egg,而不是构建它们。)
最后,除了提供对通过 setuptools 或其他打包工具构建的 egg 的访问之外,还应该注意,从 Python 2.5 开始,可以由 pkg_resources
读取以识别 sys.path
上已安装哪些发行版的 distutils 安装包元数据(也称为 PKG-INFO
)文件。在使用系统包工具(如 RPM)安装 Python 包的环境中,pkg_resources
模块提供了一个 API 用于检测已安装哪些版本的哪些包,即使这些包是通过 distutils 而不是 setuptools 安装的。
实现和文档
pkg_resources
的实现维护在 Python SVN 存储库下的 /sandbox/trunk/setuptools/
中;请参阅 pkg_resources.py
和 pkg_resources.txt
。 pkg_resources
支持的 egg 格式的文档可以在 doc/formats.txt
中找到。这些文档的 HTML 版本可在以下位置找到:
- http://peak.telecommunity.com/DevCenter/PkgResources 和
- http://peak.telecommunity.com/DevCenter/EggFormats
(这些 HTML 版本适用于 setuptools 0.6;它们可能无法反映 Subversion 主干的 .txt
版本中发现的所有更改。)
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0365.rst
上次修改时间:2023-09-09 17:39:29 GMT