术语表

二进制分发

一种包含编译扩展的特定类型的已构建分发

构建后端

一个库,它接收一个源树并从中构建源分发已构建分发。构建由前端委托给后端。所有后端都提供一个标准化的接口。

构建后端的示例有flit 的 flit-corehatch 的 hatchlingMaturinmeson-pythonscikit-build-coreSetuptools

构建前端

用户可能运行的工具,它接收任意源树或源分发,并从中构建源分发或轮子。实际构建工作被委托给每个源树的构建后端

构建前端的示例有pipbuild

已构建分发

一种分发包格式,包含只需要移动到目标系统正确位置即可安装的文件和元数据。Wheel就是这样一种格式,而源分发则不是,因为它在安装前需要一个构建步骤。这种格式并不意味着 Python 文件必须预编译(Wheel有意不包含编译后的 Python 文件)。有关更多信息,请参阅包格式

已构建元数据

核心元数据在安装的项目METADATA文件)或分发归档Sdist中的PKG-INFOWheel中的METADATA)中包含时的具体形式。

核心元数据

描述分发包已安装项目关键静态属性的规范及其定义的一组核心元数据字段

核心元数据字段

核心元数据规范中定义并存储在已构建元数据中的单个键值对(或具有相同名称的此类序列,用于多用途字段)。值得注意的是,它与Pyproject 元数据键不同。

分发归档

分发包的物理分发工件(即磁盘上的文件)。

分发包

一个带有版本号的归档文件,包含 Python 模块和其他资源文件,用于分发发布版本。这个归档文件是最终用户将从互联网下载并安装的文件。

分发包更常被称为“包”或“分发”,但当需要更清晰地避免与导入包(也常称为“包”)或其他类型的分发(例如 Linux 分发或 Python 语言分发)混淆时,本指南可能会使用扩展术语,这些也常被称为“分发”。有关差异的详细说明,请参阅分发包与导入包

Egg

Setuptools引入的已构建分发格式,已被Wheel取代。有关详细信息,请参阅Egg 又如何?

扩展模块

使用 Python 实现的底层语言编写的模块:C/C++ 用于 Python,Java 用于 Jython。通常包含在单个可动态加载的预编译文件中,例如,Unix 上 Python 扩展的共享对象 (.so) 文件,Windows 上 Python 扩展的 DLL(给定 .pyd 扩展名),或 Jython 扩展的 Java 类文件。

导入包

一个 Python 模块,可以包含其他模块,或者递归地包含其他包。

导入包更常被称为“包”,但当需要更清晰地避免与分发包混淆时,本指南将使用扩展术语,分发包也常被称为“包”。有关差异的详细说明,请参阅分发包与导入包

已安装项目

一个项目,已按照记录已安装项目规范的描述,为与 Python 解释器或虚拟环境一起使用而安装。

已知良好集合 (KGS)

一组特定版本的、彼此兼容的分发。通常会运行一个测试套件,在所有测试通过后,特定的一组包才会被声明为已知良好集合。这个术语通常用于由多个独立分发组成的框架和工具包。

许可证分类器

一个 PyPI Trove 分类器(如核心元数据规范中所述),以License ::开头。

许可证表达式
SPDX 表达式

一个具有有效 SPDX 许可证表达式语法的字符串,包含一个或多个 SPDX 许可证标识符,描述了一个项目的许可证及其相互关系。示例:GPL-3.0-or-laterMIT AND (Apache-2.0 OR BSD-2-Clause)

许可证标识符
SPDX 标识符

一个有效的 SPDX 短格式许可证标识符,最初在PEP 639中指定。这包括所有有效的 SPDX 标识符和符合 SPDX 规范的自定义LicenseRef-[idstring]字符串。示例:MIT, GPL-3.0-only, LicenseRef-My-Custom-License

模块

Python 中代码复用的基本单位,分为两种类型:纯模块扩展模块

包索引

一个分发仓库,具有用于自动化发现和消费的 Web 界面。

按项目索引

一个私有的或其他非规范的包索引,由特定的项目指定为该项目解决依赖项的首选或必需索引。

项目

一个库、框架、脚本、插件、应用程序或数据或其他资源的集合,或者它们的某种组合,旨在打包成一个分发

由于大多数项目使用PEP 518 build-systemdistutilsSetuptools创建分发包,目前定义项目的另一种实用方法是,它在项目源目录的根部包含一个pyproject.tomlsetup.pysetup.cfg文件。

Python 项目必须具有唯一的名称,这些名称在PyPI上注册。每个项目将包含一个或多个发布版本,每个发布版本可能包含一个或多个分发包

请注意,有一个强烈的约定,即项目名称与运行该项目时导入的包名称相同。然而,这并非必须如此。可以从项目“foo”安装一个分发包,并使其仅作为“bar”可导入。

项目根目录

项目源树所在的 文件系统目录。

项目源树

项目在磁盘上的开发格式,包含其原始源代码,在打包成源分发已构建分发之前。

项目源元数据

由包作者在项目源树中定义的元数据,将由项目的构建后端转换为已构建元数据中的核心元数据字段。可以写成Pyproject 元数据,或者采用工具特定格式(在pyproject.toml[tool]表中,或在工具自己的配置文件中)。

纯模块

一个用 Python 编写的模块,包含在一个独立的.py文件中(可能还有相关的.pyc和/或.pyo文件)。

Pyproject 元数据

pyproject.toml 规范中定义的、最初在PEP 621中引入的项目源元数据格式,存储在pyproject.toml文件的[project]表下的Pyproject 元数据键中。值得注意的是,它不是pyproject.toml[tool]表下的工具特定源元数据格式。

Pyproject 元数据键

pyproject.toml[project]表中的顶级 TOML 键;是Pyproject 元数据的一部分。值得注意的是,它与核心元数据字段不同。

Pyproject 元数据子键

在表值Pyproject 元数据键下的二级 TOML 键。

Python 包管理机构 (PyPA)

PyPA 是一个工作组,负责维护 Python 包管理中的许多相关项目。他们在pypa.io维护一个网站,在GitHubBitbucket上托管项目,并在distutils-sig 邮件列表Python Discourse 论坛上讨论问题。

Python 包索引 (PyPI)

PyPI是 Python 社区的默认包索引。它对所有 Python 开发者开放,以消费和分发他们的分发包。

pypi.org

pypi.orgPython 包索引 (PyPI)的域名。它在 2017 年取代了旧版索引域名pypi.python.org。它由Warehouse提供支持。

pyproject.toml

工具无关的项目规范文件。在PEP 518中定义。

发布版本

在特定时间点,由版本标识符表示的项目的快照。

发布版本可能涉及发布多个分发包。例如,如果项目版本 1.0 发布,它可能以源分发格式和 Windows 安装程序分发格式提供。

需求

一个待安装的规范。pipPYPA推荐的安装程序,它允许各种形式的规范,所有这些都可以被视为“需求”。有关更多信息,请参阅pip install参考。

需求说明符

pip用于从包索引安装包的格式。有关该格式的 EBNF 图,请参阅依赖说明符。例如,“foo>=1.3”是一个需求说明符,其中“foo”是项目名称,“>=1.3”部分是版本说明符

需求文件

一个包含需求列表的文件,可以使用pip安装。有关更多信息,请参阅pip关于需求文件的文档。

根许可证目录
许可证目录

项目源树分发归档已安装项目中存储许可证文件的目录。对于项目源树源分发(或“sdist”),这是项目根目录。对于已构建分发已安装项目,这是 wheel 归档或项目文件夹中的.dist-info/licenses/目录。此外,它是License-File核心元数据字段中记录的路径的相对根目录。

setup.py
setup.cfg

distutilsSetuptools的项目规范文件。另请参阅pyproject.toml

源归档

一个包含发布版本原始源代码的归档文件,在创建源分发已构建分发之前。

源分发(或“sdist”)

一种分发格式(通常使用python -m build --sdist生成),提供元数据和由pip等工具安装或生成已构建分发所需的必要源文件。有关更多信息,请参阅包格式

系统包

以操作系统原生格式提供的包,例如 rpm 或 dpkg 文件。

版本说明符

需求说明符的版本组成部分。例如,“foo>=1.3”中的“>=1.3”部分。请阅读版本说明符规范,以获取 Python 包管理目前支持的说明符的完整描述。对该规范的支持已在Setuptools v8.0 和pip v6.0 中实现。

虚拟环境

一个隔离的 Python 环境,允许为特定应用程序安装包,而不是系统范围安装。有关更多信息,请参阅创建虚拟环境部分。

Wheel 格式
Wheel

标准已构建分发格式,最初在PEP 427中引入,并由二进制分发格式规范定义。有关更多信息,请参阅包格式。不要与它的参考实现Wheel 项目混淆。

Wheel 项目

PyPA 对Wheel 格式的参考实现;请参阅wheel

工作集

可供导入的分发包集合。这些是位于sys.path变量中的分发包。一个工作集中,一个项目最多只能有一个分发包