项目摘要

Python 安装和打包领域中最相关项目的摘要和链接。

PyPA 项目

bandersnatch

文档 | 问题 | GitHub | PyPI

bandersnatch 是一个 PyPI 镜像客户端,旨在高效地创建 PyPI 内容的完整镜像。组织因此可以节省软件包下载的带宽和延迟(尤其是在自动化测试中),并防止 PyPI 的内容分发网络 (CDN) 负载过重。文件可以从本地目录或 AWS S3 提供。

build

文档 | 问题 | GitHub | PyPI

build 是一个 PEP 517 兼容的 Python 包构建器。它提供了一个 CLI 来构建包,以及一个 Python API。

cibuildwheel

文档 | 问题 | GitHub | PyPI | 讨论 | Discord #cibuildwheel

cibuildwheel 是一个 Python 包,可以在大多数 CI 系统上为所有常用平台和 Python 版本构建 wheel。另请参阅 multibuild

distlib

文档 | 问题 | GitHub | PyPI

distlib 是一个库,实现了与 Python 软件的打包和分发相关的低级函数。distlib 实现了几个相关的 PEP(Python 增强提案标准),对于第三方打包工具的开发者来说,它对于制作和上传二进制和源代码 分发包、实现互操作性、解决依赖关系、管理包资源以及执行其他类似功能都很有用。

与更严格的 packaging 项目(见下文)不同,后者专门实现了现代 Python 打包互操作性标准。distlib 在处理早于现代互操作性标准且不兼容这些标准的遗留包和元数据时,也会尝试提供合理的后备行为。

distutils

最初的 Python 打包系统,在 Python 2.0 中添加到标准库,并在 3.12 中删除。

由于维护一个功能更新与语言运行时更新紧密耦合的打包系统面临挑战,因此一直积极不鼓励直接使用 distutilsSetuptools 是首选替代方案。Setuptools 不仅提供了纯 distutils 不具备的功能(例如依赖声明和入口点声明),而且还在所有支持的 Python 版本中提供了一致的构建接口和功能集。

因此,distutils 在 Python 3.10 中被 PEP 632 弃用,并已从 Python 3.12 中的标准库中 移除。Setuptools 捆绑了 distutils 的独立副本,如果您首先导入 setuptools 或使用 pip,即使在 Python < 3.12 上也会注入它。

flit

文档 | 问题 | PyPI

Flit 提供了一种简单的方法来创建纯 Python 包和模块并将其上传到 PyPI。它侧重于 使简单的事情变得容易。Flit 可以生成配置文件以快速设置简单项目、构建源代码分发包和 wheel,并将它们上传到 PyPI。

Flit 使用 pyproject.toml 来配置项目。Flit 不依赖于诸如 Setuptools 等工具来构建分发包,也不依赖于 twine 来将它们上传到 PyPI。Flit 需要 Python 3,但您可以将其用于分发 Python 2 模块,只要它们可以在 Python 3 上导入。

自 2023 年 10 月以来,Flit 包由 Matthias Bussonniertidelift 平台上进行提升,资金已发送给 PSF 并指定用于 PyPA 用途。

hatch

文档 | GitHub | PyPI

Hatch 是一个统一的命令行工具,旨在方便地管理 Python 开发人员的依赖项和环境隔离。Python 包开发人员使用 Hatch 及其 构建后端 Hatchling 来配置、版本化、指定依赖项并发布包到 PyPI。其插件系统允许轻松扩展功能。

packaging

文档 | 问题 | GitHub | PyPI

pipSetuptools 使用的 Python 打包核心工具。

packaging 库中的核心工具处理 Python 包的版本管理、说明符、标记、需求、标签以及类似属性和任务。大多数 Python 用户无需明确调用此库即可依赖它;此处列出的其他 Python 打包、分发和安装工具的开发人员通常使用其功能来解析、发现和处理依赖项属性。

该项目专门侧重于实现 PyPA 规范中定义的现代 Python 打包互操作性标准,并将报告与这些标准不兼容的足够旧的遗留包的错误。相比之下,distlib 项目是一个更宽松的库,它试图在 packaging 报告错误的情况下,对含糊的元数据提供合理的解读。

pip

文档 | 问题 | GitHub | PyPI

安装 Python 包最流行的工具,也是现代 Python 版本中包含的工具。

它提供了从 PyPI 和其他 Python 包索引查找、下载和安装包的基本核心功能,并且可以通过其命令行接口 (CLI) 集成到各种开发工作流中。

Pipenv

文档 | 源代码 | 问题 | PyPI

Pipenv 是一个旨在将所有打包领域的优点带到 Python 世界的项目。它将 Pipfilepipvirtualenv 整合到一个工具链中。它可以自动导入 requirements.txt,并使用 safety 检查 Pipfile 中的 CVE。

Pipenv 旨在帮助用户在命令行上管理环境、依赖项和导入的包。它在 Windows 上也运行良好(其他工具通常服务不足),生成并检查文件哈希值,以确保符合哈希锁定依赖项说明符,并简化包和依赖项的卸载。

Pipfile

源代码

Pipfile 及其姐妹文件 Pipfile.lockpip 的低级 requirements.txt 文件的更高级、以应用程序为中心的替代品。

pipx

文档 | GitHub | PyPI

pipx 是一个用于安装和运行 Python 命令行应用程序的工具,而不会导致与系统上安装的其他包产生依赖冲突。

Python 打包用户指南

文档 | 问题 | GitHub

本指南!

readme_renderer

GitHub 和文档 | PyPI

readme_renderer 是一个库,包开发者使用它将他们的用户文档 (README) 文件从 Markdown 或 reStructuredText 等标记语言渲染成 HTML。开发者在发布管理过程中单独调用它,或通过 twine 调用它,以检查他们的包描述是否能在 PyPI 上正确显示。

Setuptools

文档 | 问题 | GitHub | PyPI

Setuptools(包含 easy_install)是 Python distutils 的增强集合,它允许您更轻松地构建和分发 Python 分发包,特别是那些依赖于其他包的分发包。

trove-classifiers

问题 | GitHub | PyPI

trove-classifiers 是 PyPI 上的分类器的规范来源,项目维护者使用它 系统地描述他们的项目,以便用户更好地在 PyPI 上找到符合他们需求的项目。

trove-classifiers 包包含有效分类器和已弃用分类器(与替换它们的分类器配对)的列表。使用此包可以验证用于上传到 PyPI 的包中的分类器。由于此分类器列表以代码形式发布,您可以安装和导入它,与参考 PyPI 上发布的列表相比,这为您提供了更便捷的工作流程。该项目的 问题跟踪器 托管了关于建议分类器和新分类器请求的讨论。

twine

文档 | 问题 | GitHub | PyPI

Twine 是开发人员用来将软件包上传到 Python 包索引或其他 Python 包索引的主要工具。它是一个命令行程序,将程序文件和元数据传递给 Web API。开发人员使用它是因为它是 PyPI 的官方上传工具,它快速且安全,得到维护,并且可靠工作。

virtualenv

文档 | 问题 | GitHub | PyPI

virtualenv 是一个用于创建隔离的 Python 虚拟环境的工具,类似于 venv。与 venv 不同,virtualenv 可以为其他版本的 Python 创建虚拟环境,它通过 PATH 环境变量定位这些版本。它还提供了方便的功能来配置、维护、复制和排查虚拟环境。有关更多信息,请参阅 创建虚拟环境部分。

Warehouse

文档 | 问题 | GitHub

目前驱动 Python 包索引 (PyPI) 的代码库。它托管在 pypi.org。是 pip 下载的默认来源。

wheel

文档 | 问题 | GitHub | PyPI

wheel 项目主要提供 bdist_wheel Setuptools 扩展,用于创建 wheel 分发包。此外,它还提供自己的命令行工具来创建和安装 wheel。

另请参阅 auditwheel,这是一个包开发人员用于检查和修复他们正在制作的二进制 wheel 格式的 Python 包的工具。它提供了发现依赖项、检查元数据以符合性、以及修复 wheel 和元数据以正确链接和包含包中的外部共享库的功能。

非 PyPA 项目

buildout

文档 | 问题 | PyPI | GitHub

Buildout 是一个基于 Python 的构建系统,用于从多个部分创建、组装和部署应用程序,其中一些部分可能不是基于 Python 的。它允许您创建构建配置并在以后重现相同的软件。

conda

文档

Conda 是一个适用于任何语言的包、依赖项和环境管理系统——Python、R、Ruby、C/C++、Fortran 等。它用 Python 编写,因其对非 Python 编译库和扩展的支持而在 Python 科学计算社区中广泛使用。它被用作 Anaconda, Inc. 的 Anaconda Python 分发版的基础。它最初面向科学社区,但也可以独立使用,或与 minicondaminiforgepixi 系统一起使用。它适用于 Windows、Mac 和 Linux 系统。

Conda 是一个与 pip、virtualenv 和 wheel 完全独立的工具,但提供了它们许多组合功能,例如包管理、虚拟环境管理以及二进制扩展和其他二进制代码的部署。

Conda 不会从 PyPI 安装软件包——它只能管理专门为 conda 构建的软件包,这些软件包可以通过“conda 频道”提供,例如托管在 anaconda.org 上的频道,或本地(例如,内部网)软件包服务器。除了由 Anaconda, Inc. 管理的“默认”频道外,还有来自社区支持的 conda-forge 项目 的各种软件包。

请注意,pip 可以安装到 conda 中,并与 conda 并行工作,以管理来自 PyPI 的 分发包。也可以使用诸如 conda skeleton 等工具从 Python 源代码包构建 conda 包:该工具可以自动从 PyPI 上的 Python 包创建 conda 包。

devpi

文档 | 问题 | PyPI

devpi 具有功能强大的 PyPI 兼容服务器和 PyPI 代理缓存,并附带一个互补的命令行工具,用于驱动 Python 的打包、测试和发布活动。devpi 还提供了一个可浏览和可搜索的 Web 界面。devpi 支持镜像 PyPI、具有继承功能的多个 包索引、这些索引之间的同步、索引复制和故障转移以及包上传。

dumb-pypi

GitHub | PyPI

dumb-pypi 是一个简单的 包索引 静态文件站点生成器,然后必须由静态文件 Web 服务器托管才能成为包索引。它支持提供哈希值、核心元数据和撤销状态。

enscons

源代码 | 问题 | PyPI

Enscons 是一个基于 SCons 的 Python 打包工具。它无需使用 distutils 或 setuptools 即可构建与 pip 兼容的源代码分发包和 wheel,包括带 C 扩展的分发包。Enscons 具有与 distutils 不同的架构和理念。Enscons 不是在 Python 打包系统中添加构建功能,而是在通用构建系统中添加 Python 打包功能。Enscons 帮助您构建可由 pip 自动构建的 sdists,以及独立于 Enscons 的 wheel。

Flask-Pypi-Proxy

文档 | GitHub | PyPI

警告

未维护,项目已归档

Flask-Pypi-Proxy 是一个作为 PyPI 缓存代理的 包索引

Hashdist

文档 | GitHub

Hashdist 是一个用于构建非 root 软件分发版的库。Hashdist 试图成为“在 Debian 技术不起作用的情况下首选的 Debian”。Pythonista 思考 Hashdist 的最佳方式可能是一个更强大的 virtualenvbuildout 混合体。它旨在解决安装科学软件的问题,并使包分发无状态、可缓存和可分支。一些研究人员使用它,但自 2016 年以来一直缺乏维护。

Maturin

文档 | GitHub

Maturin 是一个 Rust 扩展模块的构建后端,也用 Rust 编写。它支持为 Windows、Linux、macOS 和 FreeBSD 上的 Python 3.7+ 构建 wheel,可以将其上传到 PyPI,并具有基本的 PyPy 和 GraalPy 支持。

meson-python

文档 | GitHub

meson-python 是一个使用 Meson 构建系统的构建后端。它使 Python 包作者能够使用 Meson 作为其包的构建系统。它支持多种语言,包括 C,并能够满足大多数复杂构建配置的需求。

multibuild

GitHub

Multibuild 是一组 CI 脚本,用于构建和测试适用于 Linux、macOS 和(灵活性较差)Windows 的 Python wheel。另请参阅 cibuildwheel

nginx_pypi_cache

GitHub

nginx_pypi_cache 是一个使用 nginx包索引 缓存代理。

pdm

文档 | GitHub | PyPI

PDM 是一个现代 Python 包管理器。它使用 pyproject.toml 来存储 PEP 621 中定义的项目元数据。

pex

文档 | GitHub | PyPI

Pex 是一个用于生成 .pex (Python EXecutable) 文件的工具,这些文件是独立的 Python 环境,其精神与 virtualenv 类似。PEX 文件是 zipapps,使 Python 应用程序的部署像 cp 一样简单。单个 PEX 文件可以支持多个目标平台,并且可以从标准 pip 可解析的需求、使用 pex3 lock ... 生成的锁文件或甚至另一个 PEX 创建。PEX 文件可以选择嵌入工具,支持将 PEX 文件转换为标准 venv、绘制依赖图等。

pip-tools

文档 | GitHub | PyPI

pip-tools 是一个工具套件,适用于特别希望保持其构建确定性但又想与新版本依赖项保持同步的 Python 系统管理员和发布经理。用户可以通过哈希指定其依赖项的特定版本,方便地从程序其他部分的信息中生成格式正确的需求列表,更新所有依赖项(这是 pip 目前不提供的一个功能),并为程序创建要遵守的约束层。

pip2pi

GitHub | PyPI

pip2pi 是一个 包索引 服务器,其中特定包手动同步。

piwheels

网站 | 文档 | GitHub

piwheels 是一个网站及其底层软件,它从 PyPI 获取源代码分发包并将其编译成二进制 wheel,这些 wheel 经过优化以安装到 Raspberry Pi 计算机上。Raspberry Pi OS 预配置 pip 以使用 piwheels.org 作为 PyPI 的附加索引。

poetry

文档 | GitHub | PyPI

poetry 是一个命令行工具,用于处理依赖项安装和隔离以及 Python 包的构建和打包。它使用 pyproject.toml,并且不依赖于 pip 中的解析器功能,而是提供自己的依赖项解析器。它试图通过本地缓存依赖项的元数据来加速用户的安装和依赖项解析体验。

proxpi

GitHub | PyPI

proxpi 是一个简单的 包索引,它代理 PyPI 和其他带有缓存的索引。

Pulp-python

文档 | GitHub | PyPI

Pulp-python 是 Pulp 的 Python 包索引 插件。Pulp-python 支持由本地或 AWS S3 支持的镜像、包上传以及代理到多个包索引。

PyPI Cloud

文档 | GitHub | PyPI

警告

未维护,项目已归档

PyPI Cloud 是一个 包索引 服务器,由 AWS S3 或其他云存储服务或本地文件支持。PyPI Cloud 支持 PyPI 的重定向/缓存代理,以及身份验证和授权。

pypiprivate

GitHub | PyPI

pypiprivate 将本地(或 AWS S3 托管的)包目录作为 包索引 提供。

pypiserver

GitHub | PyPI

pypiserver 是一个极简主义的应用程序,在组织内部作为私有 Python 包索引(从本地目录)提供服务,实现了一个简单的 API 和浏览器界面。您可以使用标准上传工具上传私有包,用户可以使用 pip 下载和安装它们,而无需公开发布。使用 pypiserver 的组织通常同时从 pypiserver 和 PyPI 下载包。

PyScaffold

文档 | GitHub | PyPI

PyScaffold 是一个项目生成器,用于引导 Python 包,使其可以在 PyPI 上共享并可通过 pip 安装。它依赖于一组健全的默认配置,适用于成熟的工具(例如 SetuptoolspytestSphinx),以提供一个高效的环境,让开发人员可以立即开始编码。PyScaffold 也可以与现有项目一起使用,以简化打包。

pywharf

GitHub | PyPI

警告

未维护,项目已归档

pywharf 是一个 包索引 服务器,用于本地或从 GitHub 提供文件。

scikit-build

文档 | GitHub | PyPI

Scikit-build 是 CPython 的 Setuptools 包装器,用于构建 C/C++/Fortran/Cython 扩展。它使用 cmake(可在 PyPI 上获取)来更好地支持附加编译器、构建系统、交叉编译以及定位依赖项及其相关的构建要求。为了加速和并行化大型项目的构建,用户可以安装 ninja(也可在 PyPI 上获取)。

scikit-build-core

文档 | GitHub | PyPI

Scikit-build-core 是 CPython C/C++/Fortran/Cython 扩展的构建后端。它允许用户使用 cmake(可在 PyPI 上获取)编写扩展,以提供对附加编译器、构建系统、交叉编译以及定位依赖项及其相关构建要求的更好支持。如果系统上没有 CMake/Ninja,它们会自动从 PyPI 下载。

shiv

文档 | GitHub | PyPI

shiv 是一个命令行工具,用于构建完全独立的 Python zipapps,如 PEP 441 中所述,但包含所有依赖项。其主要目标是使 Python 应用程序和命令行工具的发布快速简便。

simpleindex

GitHub | PyPI

simpleindex 是一个 包索引,它将 URL 路由到多个包索引(包括 PyPI),提供本地(或云托管,例如 AWS S3,带有自定义插件)包目录,并支持自定义插件。

Spack

文档 | GitHub | 论文 | 幻灯片

一个灵活的包管理器,旨在支持多个版本、配置、平台和编译器。Spack 类似于 Homebrew,但包是用 Python 编写的,并经过参数化,允许轻松切换编译器、库版本、构建选项等。任意多个版本的包可以共存于同一个系统上。Spack 旨在快速构建集群和超级计算机上的高性能科学应用程序。

Spack 尚未在 PyPI 中,但它不需要安装,在从 GitHub 克隆后即可立即使用。

zest.releaser

文档 | GitHub | PyPI

zest.releaser 是一个 Python 包发布工具,在 twine 之上提供了一个抽象层。Python 开发人员使用 zest.releaser 自动化包版本号递增、更新更改日志、在源代码控制中标记发布以及将新包上传到 PyPI。

标准库项目

ensurepip

文档 | 问题

Python 标准库中的一个包,提供将 pip 引导到现有 Python 安装或虚拟环境中的支持。在大多数情况下,最终用户不会使用此模块,而是在 Python 分发包的构建过程中使用它。

http.server

文档 | 问题

一个包和命令行接口,可以将目录作为网站托管,例如作为 包索引(参见 托管您自己的简单存储库)。

venv

文档 | 问题

Python 标准库中的一个包(从 Python 3.3 开始)用于创建 虚拟环境。有关更多信息,请参阅 创建虚拟环境 部分。