项目摘要#
Python 安装和打包领域中相关项目摘要和链接。
PyPA 项目#
bandersnatch#
bandersnatch
是一个 PyPI 镜像客户端,旨在高效创建 PyPI 内容的完整镜像。因此,组织可以在软件包下载(尤其是在自动化测试环境中)节省带宽和延迟,并防止 PyPI 的内容分发网络 (CDN) 负载过重。文件可以从本地目录或 AWS S3 提供。
build#
build
是一个 PEP 517 兼容的 Python 软件包构建器。它提供了一个 CLI 来构建软件包,以及一个 Python API。
cibuildwheel#
文档 | 问题 | GitHub | PyPI | 讨论 | Discord #cibuildwheel
cibuildwheel
是一个 Python 软件包,可在大多数 CI 系统上为所有常见平台和 Python 版本构建 wheels。另请参阅 multibuild。
distlib#
distlib
是一个库,它实现了与 Python 软件的打包和分发相关的低级函数。distlib
实施了几个相关的 PEP(Python 增强提案标准),对于第三方打包工具的开发者来说非常有用,他们可以使用该库来制作和上传二进制和源 分发,实现互操作性,解决依赖关系,管理软件包资源,以及执行其他类似功能。
与更严格的 packaging 项目(如下所示)不同,后者专门实现了现代 Python 打包互操作性标准,distlib
还尝试在处理旧版软件包和元数据(这些软件包和元数据早于现代互操作性标准,并且属于与这些标准不兼容的软件包子集)时提供合理的回退行为。
distutils#
原始 Python 打包系统,已添加到 Python 2.0 的标准库中,并在 3.12 中删除。
由于维护一个将功能更新与语言运行时更新紧密耦合的打包系统存在挑战,因此已积极不鼓励直接使用 distutils,而
因此,distutils 已在 Python 3.10 中被 PEP 632 弃用,并在 Python 3.12 中从标准库中 移除。Setuptools 捆绑了 distutils 的独立副本,如果您先导入 setuptools 或使用 pip,它甚至会在 Python < 3.12 上注入。
flit#
Flit 提供了一种简单的方法来创建和将纯 Python 包和模块上传到 PyPI。它专注于 让打包变得容易。Flit 可以生成一个配置文件来快速设置一个简单的项目,构建源代码分发和轮子,并将它们上传到 PyPI。
Flit 使用 pyproject.toml
来配置项目。Flit 不依赖于 Setuptools 等工具来构建分发,也不依赖于 twine 将它们上传到 PyPI。Flit 需要 Python 3,但您可以使用它来分发 Python 2 的模块,只要它们可以在 Python 3 上导入即可。
自 2023 年 10 月起,flit 包由 Matthias Bussonnier 在 tidelift 平台 上提升,并向 PSF 发送资金并指定用于 PyPA 用途。
hatch#
Hatch 是一款统一的命令行工具,旨在方便地管理 Python 开发人员的依赖项和环境隔离。Python 包开发人员使用 Hatch 及其 构建后端 Hatchling 来配置、版本化、指定依赖项并发布包到 PyPI。其插件系统允许轻松扩展功能。
packaging#
Python 打包的核心实用程序,由 pip 和 Setuptools 使用。
packaging 库中的核心实用程序处理 Python 包的版本处理、说明符、标记、要求、标签和类似属性和任务。大多数 Python 用户依赖于此库,而无需显式调用它;此处列出的其他 Python 打包、分发和安装工具的开发人员经常使用其功能来解析、发现和以其他方式处理依赖项属性。
此项目专门专注于实现 PyPA 规范 中定义的现代 Python 打包互操作性标准,并将报告与那些标准不兼容的足够旧的旧包的错误。相比之下,distlib 项目是一个更宽容的库,它尝试在 packaging 将报告错误的情况下提供对模棱两可的元数据的合理解读。
pip#
安装 Python 包最流行的工具,也是现代版本 Python 中包含的工具。
它提供了从 PyPI 和其他 Python 包索引中查找、下载和安装包的基本核心功能,并且可以通过其命令行界面 (CLI) 融入到广泛的开发工作流中。
Pipenv#
Pipenv 是一个旨在将所有打包领域的精华带入 Python 领域的项目。它将 Pipfile、pip 和 virtualenv 融合到一个单一的工具链中。它可以自动导入 requirements.txt
,还可以使用 safety 检查 Pipfile 中的 CVE。
Pipenv 旨在帮助用户在命令行上管理环境、依赖项和导入的包。它在 Windows 上也运行良好(其他工具经常对其支持不足),生成并检查文件哈希,以确保符合哈希锁定的依赖项说明符,并简化包和依赖项的卸载。
Pipfile#
Pipfile
及其姐妹 Pipfile.lock
是 pip 的较低级别 requirements.txt
文件的更高级别的以应用程序为中心的替代方案。
pipx#
pipx 是一个工具,用于安装和运行 Python 命令行应用程序,而不会导致与系统上安装的其他包的依赖项冲突。
Python 打包用户指南#
本指南!
readme_renderer#
readme_renderer
是一个库,包开发人员使用它将他们的用户文档 (README) 文件从标记语言(如 Markdown 或 reStructuredText)呈现为 HTML。开发人员可以单独调用它,也可以通过 twine 在他们的发布管理流程中调用它,以检查他们的包描述是否会在 PyPI 上正确显示。
Setuptools#
Setuptools(包括 easy_install
)是对 Python distutils 的一系列增强,它使你可以更轻松地构建和分发 Python 分发,尤其是那些依赖于其他包的分发。
trove-classifiers#
trove-classifiers 是 PyPI 上分类器 的规范来源,项目维护人员使用这些分类器来 系统地描述他们的项目,以便用户可以更好地在 PyPI 上找到符合他们需求的项目。
trove-classifiers 包含有效的分类器和已弃用的分类器(与替换它们的分类器配对)的列表。使用此包来验证用于准备上传到 PyPI 的包中的分类器。由于此分类器列表以代码形式发布,因此你可以安装并导入它,与参考 在 PyPI 上发布的列表 相比,它为你提供了更方便的工作流。该项目的 问题跟踪器 托管有关拟议分类器和新分类器请求的讨论。
twine#
Twine 是开发者用来将软件包上传到 Python 软件包索引或其他 Python 软件包索引的主要工具。它是一个命令行程序,将程序文件和元数据传递给 Web API。开发者使用它,因为它既是官方的 PyPI 上传工具,又快速且安全,而且它得到了维护,并且可靠地工作。
virtualenv#
virtualenv 是一个用于创建隔离的 Python 虚拟环境的工具,如 venv。与 venv 不同,virtualenv 可以为其他版本的 Python 创建虚拟环境,它使用 PATH 环境变量来定位这些版本。它还提供了用于配置、维护、复制和对虚拟环境进行故障排除的便捷功能。有关更多信息,请参阅 创建虚拟环境 部分。
Warehouse#
为 Python 软件包索引 (PyPI) 提供支持的当前代码库。它托管在 pypi.org 上。用于 pip 下载的默认源。
wheel#
wheel 项目主要提供 bdist_wheel
Setuptools 扩展,用于创建 wheel 分发。此外,它还提供了自己的命令行实用程序,用于创建和安装 wheel。
另请参阅 auditwheel,这是一个工具,软件包开发者使用它来检查和修复他们正在制作的二进制 wheel 格式的 Python 软件包。它提供了发现依赖项、检查元数据是否符合要求以及修复 wheel 和元数据以正确链接和包含软件包中的外部共享库的功能。
非 PyPA 项目#
buildout#
Buildout 是一个基于 Python 的构建系统,用于从多个部分(其中一些可能不是基于 Python 的)创建、组装和部署应用程序。它允许你创建 buildout 配置并稍后复制相同的软件。
conda#
conda 是 Anaconda Python 安装的软件包管理工具。Anaconda Python 是 Anaconda, Inc 的一个发行版,专门针对科学界,尤其是在 Windows 上,在那里安装二进制扩展通常很困难。
Conda 是一个与 pip、virtualenv 和 wheel 完全独立的工具,但在软件包管理、虚拟环境管理和二进制扩展部署方面提供了它们许多组合的功能。
Conda 不从 PyPI 安装软件包,只能从官方 Anaconda 存储库或 anaconda.org(用户贡献的 conda 软件包的地方)或本地(例如内部网)软件包服务器安装软件包。但是,请注意,pip 可以安装到 conda 中,并与 conda 并行工作,以管理来自 PyPI 的 分发。此外,conda skeleton 是一个工具,可以通过先从 PyPI 获取 Python 软件包并修改其元数据,使 conda 可以安装这些软件包。
devpi#
devpi 具有一个功能强大的与 PyPI 兼容的服务器和 PyPI 代理缓存,并配有补充命令行工具,用于使用 Python 驱动打包、测试和发布活动。devpi 还提供了一个可浏览和可搜索的 Web 界面。devpi 支持镜像 PyPI、多个 包索引(具有继承性)、在这些索引之间同步、索引复制和故障转移,以及包上传。
dumb-pypi#
dumb-pypi 是一个简单的 包索引 静态文件网站生成器,然后必须由静态文件 Web 服务器托管才能成为包索引。它支持提供哈希、核心元数据和撤销状态。
enscons#
Enscons 是一个基于 SCons 的 Python 打包工具。它构建与 pip 兼容的源代码分发版和轮子,而无需使用 distutils 或 setuptools,包括带有 C 扩展的分布。Enscons 具有与 distutils 不同的架构和理念。enscons 不是向 Python 打包系统添加构建功能,而是向通用构建系统添加 Python 打包功能。Enscons 帮助您构建可以由 pip 自动构建的 sdist,以及独立于 enscons 的轮子。
Flask-Pypi-Proxy#
警告
未维护,项目已存档
Flask-Pypi-Proxy 是一个 包索引,作为 PyPI 的缓存代理。
Hashdist#
Hashdist 是一个用于构建非 root 软件分发版的库。Hashdist 尝试成为“在 Debian 技术不起作用的情况下首选的 Debian”。Pythonista 思考 Hashdist 的最佳方式可能是 virtualenv 和 buildout 的更强大的混合体。它的目标是解决安装科学软件的问题,并使包分发变得无状态、缓存和可分支。它被一些研究人员使用,但自 2016 年以来一直缺乏维护。
Maturin#
Maturin 是一个用于 Rust 扩展模块的构建后端,也用 Rust 编写。它支持在 Windows、Linux、macOS 和 FreeBSD 上为 Python 3.7+ 构建轮子,可以将它们上传到 PyPI,并且具有基本的 PyPy 和 GraalPy 支持。
meson-python#
meson-python
是一个使用 Meson 构建系统的构建后端。它使 Python 包作者能够使用 Meson 作为其包的构建系统。它支持多种语言,包括 C,并且能够满足大多数复杂构建配置的需求。
multibuild#
Multibuild 是一组用于构建和测试 Linux、macOS 和(灵活性较低)Windows 的 Python wheels 的 CI 脚本。另请参阅 cibuildwheel。
nginx_pypi_cache#
nginx_pypi_cache 是一个使用 nginx 的 package index 缓存代理。
pdm#
PDM 是一款现代 Python 包管理器。它使用 pyproject.toml 存储项目元数据,如 PEP 621 中所定义。
pex#
Pex 是一款用于生成 .pex
(Python 可执行文件)文件的工具,是独立的 Python 环境,其精神与 virtualenv 相同。PEX 文件是 zipapps,它们使 Python 应用程序的部署变得像 cp
一样简单。单个 PEX 文件可以支持多个目标平台,并且可以从标准 pip 可解析的要求、使用 pex3 lock ...
生成的锁定文件,甚至另一个 PEX 创建。PEX 文件可以选择嵌入工具,支持将 PEX 文件转换为标准 venv、绘制依赖关系图等。
pip-tools#
pip-tools 是一套工具,专为希望保持构建确定性,同时紧跟其依赖项新版本的 Python 系统管理员和发布经理设计。用户可以通过哈希指定其依赖项的特定版本,方便地从程序其他部分的信息中生成格式正确的需求列表,更新所有依赖项(pip 当前不提供此功能),并创建程序要遵守的约束层。
pip2pi#
pip2pi 是一个 package index 服务器,其中特定包会手动同步。
piwheels#
piwheels 是一个网站及其基础软件,它从 PyPI 获取源代码分发包,并将它们编译成针对安装到 Raspberry Pi 计算机进行优化的二进制 wheels。Raspberry Pi OS 预先配置 pip,使用 piwheels.org 作为 PyPI 的附加索引。
poetry#
poetry 是一款命令行工具,用于处理依赖项的安装和隔离,以及 Python 包的构建和打包。它使用 pyproject.toml
,并且不依赖于 pip 中的解析器功能,而是提供自己的依赖项解析器。它尝试通过本地缓存依赖项的元数据来加速用户的安装和依赖项解析体验。
proxpi#
proxpi 是一个简单的 包索引,它代理 PyPI 和其他索引并进行缓存。
Pulp-python#
Pulp-python 是 Pulp 的 Python 包索引 插件。Pulp-python 支持由本地或 AWS S3 提供支持的镜像、包上传以及代理到多个包索引。
PyPI Cloud#
警告
未维护,项目已存档
PyPI Cloud 是一个 包索引 服务器,由 AWS S3 或其他云存储服务或本地文件提供支持。PyPI Cloud 支持 PyPI 的重定向/缓存代理,以及身份验证和授权。
pypiprivate#
pypiserver#
pypiserver 是一个极简主义应用程序,它在组织内作为私有 Python 包索引(来自本地目录)提供服务,并实现了一个简单的 API 和浏览器界面。你可以使用标准上传工具上传私有包,用户可以使用 pip 下载并安装这些包,而无需公开发布它们。使用 pypiserver 的组织通常会从 pypiserver 和 PyPI 下载包。
PyScaffold#
PyScaffold 是一个项目生成器,用于引导 Python 包,以便在 PyPI 上共享并通过 pip 安装。它依赖于一组针对已建立工具(例如 Setuptools、pytest 和 Sphinx)的合理默认配置,以提供一个高效的环境,以便开发人员可以立即开始编码。PyScaffold 还可以与现有项目一起使用,以简化打包。
pywharf#
警告
未维护,项目已存档
scikit-build#
Scikit-build 是一个 Setuptools 包装器,用于构建 C/C++/Fortran/Cython 扩展。它使用 cmake(在 PyPI 上可用)来更好地支持其他编译器、构建系统、交叉编译以及查找依赖项及其关联的构建要求。为了加速和并行构建大型项目,用户可以安装 ninja(也在 PyPI 上可用)。
scikit-build-core#
Scikit-build-core 是 CPython C/C++/Fortran/Cython 扩展的构建后端。它使用户能够使用 cmake(在 PyPI 上可用)编写扩展,以更好地支持其他编译器、构建系统、交叉编译以及查找依赖项及其关联的构建要求。如果系统上没有 CMake/Ninja,它们将自动从 PyPI 下载。
shiv#
shiv 是一个命令行实用程序,用于构建完全自包含的 Python zipapp,如 PEP 441 中所述,但包含它们的所有依赖项。它的主要目标是使分发 Python 应用程序和命令行工具变得快速而简单。
simpleindex#
simpleindex 是一个 包索引,它将 URL 路由到多个包索引(包括 PyPI),提供包的本地(或云托管,例如 AWS S3,带有自定义插件)目录,并支持自定义插件。
Spack#
一个灵活的包管理器,旨在支持多个版本、配置、平台和编译器。Spack 类似于 Homebrew,但包是用 Python 编写的,并且参数化以允许轻松交换编译器、库版本、构建选项等。任意多个版本的包可以在同一系统上共存。Spack 是为在集群和超级计算机上快速构建高性能科学应用程序而设计的。
Spack 尚未在 PyPI 中(但它不需要安装,并且可以在从 GitHub 克隆后立即使用)。
zest.releaser#
zest.releaser
是一个 Python 包发布工具,在 twine 之上提供了一个抽象层。Python 开发人员使用 zest.releaser
自动增加包版本号、更新变更日志、在源代码管理中标记发布,并将新包上传到 PyPI。
标准库项目#
ensurepip#
Python 标准库中的一个包,提供将 pip 引导到现有 Python 安装或虚拟环境中的支持。在大多数情况下,最终用户不会使用此模块,而是在构建 Python 发行版时使用它。
http.server#
一个可以将目录作为网站托管的包和命令行界面,例如作为 包索引(参见 托管您自己的简单存储库)。
venv#
Python 标准库(从 Python 3.3 开始)中的一个包,用于创建 虚拟环境。有关更多信息,请参阅有关 创建虚拟环境 的部分。