初步了解 PyPA(Python Packaging Authority)下的知名项目和关系

PyPA(Python Packaging Authority)是管理和维护 Python 包相关工具的一个社区组织。PyPA 管理的知名项目包括 pip、packaging、setuptools、wheel、twine、build 等等。了解这些项目的关于有助于我们更好的了解 Python 的生态系统。

以下是这些项目的介绍以及它们之间的关系:

  1. pip

作用:pip 是 Python 的包管理工具,用于安装和管理 Python 库和依赖项。通过 pip,用户可以从 Python Package Index (PyPI) 或其他包源下载并安装所需的 Python 包。
关系:pip 依赖于 setuptools 和 wheel 来处理包的构建和安装。它是最常用的 Python 包管理工具,也是官方推荐的包安装方法。

  1. setuptools

作用:setuptools 是一个用于打包 Python 项目的工具,可以创建分发包(distribution packages)并发布到 PyPI。它扩展了 Python 标准库中的 distutils,提供了更多功能,如依赖管理、插件系统等。
关系:setuptools 是创建 Python 包时常用的工具,pip 使用 setuptools 来安装源代码形式的 Python 包。setuptools 生成的分发包通常是 .tar.gz 或 .zip 文件格式。

  1. packaging

作用:packaging 提供了用于与 Python 包打包和分发相关的核心实用工具和标准实现。它实现了一些与包版本、依赖关系解析等有关的 PEP(Python Enhancement Proposals)。
关系:packaging 是 setuptools 和 pip 等工具的底层依赖,用于处理包的版本比较、依赖解析等低层次操作。

  1. wheel

作用:wheel 是一种 Python 包的打包格式,作为 setuptools 打包格式 .egg 的替代方案。它是目前推荐的发布格式,可以避免编译步骤,安装速度更快。
关系:pip 优先安装 wheel 格式的包,因为它可以直接安装,而不需要像 .tar.gz 那样进行编译。setuptools 可以生成 wheel 格式的包。

  1. virtualenv

作用:virtualenv 用于创建独立的 Python 环境,可以避免不同项目之间的包依赖冲突。每个虚拟环境都有自己独立的 Python 可执行文件和库集合。
关系:pip 被用于管理 virtualenv 中的包。virtualenv 是创建隔离环境的工具,但近年来 Python 标准库中的 venv 模块也能提供类似功能。

  1. twine

作用:twine 是用于将 Python 包上传到 PyPI 的工具。与 setuptools 的 python setup.py upload 方法不同,twine 更加安全,支持上传 wheel 文件和 .tar.gz 文件。
关系:twine 通常与 setuptools 或 wheel 一起使用,负责将构建好的包上传到 PyPI。

  1. build

作用:build 是一个简单的命令行工具,用于构建 Python 项目。它可以使用 PEP 517 接口构建包,而不依赖于 setuptools。
关系:build 提供了比 setuptools 更简洁的构建方式,但它依赖于 setuptools 或其他构建后端(如 flit、poetry)来实际完成构建过程。

  1. pyproject.toml

作用:pyproject.toml 不是一个工具,而是一种配置文件格式。它被用来描述项目的构建需求,并支持使用不同的构建后端,如 setuptools、flit、poetry 等。
关系:pip 和 build 等工具会读取 pyproject.toml 文件,了解如何构建和安装项目。

他们之间的关系总结

  • pip 作为包管理工具,与所有这些项目都有交互关系,尤其依赖 setuptools 和 wheel 来安装包。
  • setuptools 负责包的创建和打包,并使用 packaging 处理版本和依赖。
  • wheel 是打包格式,pip 更倾向于安装 wheel 格式的包。
  • virtualenv 用来创建隔离的环境,pip 被用来在这些环境中安装依赖。
  • twine 用来安全地上传包到 PyPI,通常与 setuptools 和 wheel 结合使用。
  • build 是一个新兴的构建工具,使用 PEP 517 接口,可以使用 setuptools 作为构建后端。

这些工具共同构成了 Python 包管理和分发的完整生态系统,简化了 Python 开发者的工作流程。


转载本站文章请注明作者和出处,请勿用于任何商业用途。欢迎关注公众号「DevOps攻城狮」