python库构建之pyproject.toml

道真人 2024-10-01 12:35:10 阅读 54

<code>pyproject.toml 是一个配置文件,用于定义 Python 项目的构建系统和相关的元数据。它是 Python 社区为了解决项目构建和依赖管理问题而引入的一种标准化方式,最初由 PEP 518 提出。pyproject.toml 文件被广泛使用,尤其是在构建工具(如 PoetryFlit)中,用来替代传统的 setup.cfg 文件。

主要用途

定义构建系统

pyproject.toml 文件中可以指定构建工具及其版本,如 setuptoolspoetry,以及这些工具所需的依赖项。这使得项目的构建环境更加可控和可重复。

项目元数据

包括项目的名称、版本、描述、作者、许可证等信息,可以在 pyproject.toml 文件中定义。这些信息可以被构建工具或包管理工具读取和使用。

依赖管理

该文件可以管理项目的依赖关系,包括运行时依赖、开发时依赖等,类似于 requirements.txt,但更加结构化和灵活。

配置构建工具的行为

对于不同的构建工具,如 setuptoolspoetryblackisort 等,可以在 pyproject.toml 中配置其行为。

文件结构

一个典型的 pyproject.toml 文件由几个部分组成,每个部分对应不同的功能和配置信息。以下是LlamaFactory示例:

[build-system]

requires = ["setuptools>=61.0"]

build-backend = "setuptools.build_meta"

[tool.ruff]

target-version = "py38"

line-length = 119

indent-width = 4

[tool.ruff.lint]

ignore = ["C408", "C901", "E501", "E731", "E741", "W605"]

select = ["C", "E", "F", "I", "W"]

[tool.ruff.lint.isort]

lines-after-imports = 2

known-first-party = ["llamafactory"]

known-third-party = [

"accelerate",

"datasets",

"gradio",

"numpy",

"peft",

"torch",

"transformers",

"trl"

]

[tool.ruff.format]

quote-style = "double"

indent-style = "space"

docstring-code-format = true

skip-magic-trailing-comma = false

line-ending = "auto"

这个 pyproject.toml 文件配置了项目的构建系统以及使用 ruff 进行代码检查和格式化的相关设置。以下是各部分的详细解释:

1. [build-system]

requires: 指定了项目的构建系统依赖项。这里要求使用 setuptools 版本 61.0 或更高版本。这意味着在构建这个项目时,Python 环境中必须安装 setuptools,且版本不低于 61.0。

build-backend: 指定了用于构建项目的后端工具,这里使用的是 setuptools.build_meta。这意味着 setuptools 将作为构建过程的核心工具。

2. [tool.ruff]

target-version: 指定了代码的目标 Python 版本,这里是 Python 3.8 (py38)。ruff 将根据这个版本进行相应的检查和优化。

line-length: 指定了代码行的最大长度,超过这个长度会被视为格式错误。这里设置为 119 个字符。

indent-width: 指定代码缩进的宽度,这里设置为 4 个空格。

3. [tool.ruff.lint]

ignore: 指定了一些要忽略的规则或错误代码。列出的错误代码将不会在代码检查时触发。

select: 指定了要检查的错误或警告类别。只有属于这些类别的检查才会被启用。

4. [tool.ruff.lint.isort]

lines-after-imports: 指定在导入语句之后应保留的空行数,这里设置为 2 行。

known-first-party: 列出了项目中的第一方模块,即 llamafactory,用于在导入排序时识别项目内部的模块。

known-third-party: 列出了已知的第三方库,这些库将在导入排序时与其他模块区分开来。

5. [tool.ruff.format]

quote-style: 指定字符串使用的引号样式,这里设置为 double,即双引号。

indent-style: 指定缩进风格,这里使用 space(空格)而非 tab

docstring-code-format: 设置为 true,表示在文档字符串(docstring)中也会应用代码格式化规则。

skip-magic-trailing-comma: 设置为 false,意味着即使添加魔术尾逗号(magic trailing comma),也不会跳过格式化。

line-ending: 设置为 auto,表示根据操作系统的默认设置自动选择行结尾符。

小结

这个 pyproject.toml 文件主要配置了项目的构建系统,并详细定义了 ruff 工具用于代码风格检查和格式化的规则。这些设置帮助确保代码的一致性和质量,减少错误,并遵循团队的编码规范。

工作流程

在执行 pip install . 时,pyproject.toml 文件会在构建和安装 Python 项目的过程中被引用。具体流程如下:

1. 识别 pyproject.toml 文件

当你在项目的根目录执行 pip install . 命令时,pip 会首先检查该目录下是否存在 pyproject.toml 文件。如果存在这个文件,pip 会将其视为该项目的构建配置文件,并按照其中的内容来指导接下来的构建过程。

2. 解析 build-system 部分

pip 首先读取 pyproject.toml 文件中的 [build-system] 部分。这一部分定义了构建项目所需的依赖项以及构建后端(即构建工具)。

requires: 列出了构建这个项目所需的 Python 包。在执行 pip install . 时,pip 会确保这些包已经安装。如果这些包没有安装,pip 会首先安装这些依赖。build-backend: 指定构建项目所使用的后端工具,比如 setuptools.build_metapoetry.core.masonry.apipip 会调用这个工具来构建项目。

3. 构建源分发包(SDist)和/或轮子包(Wheel)

一旦 pip 安装了构建所需的依赖并加载了构建后端,构建后端会被调用来生成源分发包(SDist)和/或轮子包(Wheel)。

如果使用 setuptools.build_meta,它会读取项目的 setup.pysetup.cfg 文件来指导包的构建。这些构建输出会保存在临时目录中,用于接下来的安装步骤。

4. 安装项目

pip 使用生成的包(SDist 或 Wheel)安装项目到目标环境中(通常是当前 Python 环境)。如果项目依赖其他包,pip 会从 pyproject.tomlsetup.py 中的 install_requires 列表中识别并安装这些依赖。

5. 其他工具配置

pyproject.toml 中的其他部分,如 [tool.ruff],可能会被相应的工具在构建或开发过程中引用。虽然这些部分不会直接影响 pip install . 的过程,但它们在开发环境中依然重要。

简化的执行流程

pip 检查并加载 pyproject.toml 文件。解析 build-system,安装构建所需的依赖。使用指定的构建后端构建项目(生成 SDist 和/或 Wheel)。安装生成的包及其依赖。

总结

pyproject.toml 文件在 pip install . 的过程中会被 pip 引用,以确定如何构建和安装项目。pip 主要使用其中的 [build-system] 部分来加载构建工具和依赖,然后调用这些工具生成项目的分发包,并最终将其安装到当前环境中。


上一篇: STL简介

下一篇: 算法【Java】—— 位运算

本文标签

python库构建之pyproject.toml   


声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。