python库构建之pyproject.toml配置文件详解

 更新时间:2024年12月07日 09:18:09   作者:道真人  
pyproject.toml是Python项目标准化配置文件,由PEP 518引入,用于定义构建系统、项目元数据和依赖管理,它替代了传统的setup.cfg文件,通过指定构建工具如setuptools或poetry,管理项目依赖,配置工具行为等,需要的朋友可以参考下

前言

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

主要用途

  • 定义构建系统

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

    • 包括项目的名称、版本、描述、作者、许可证等信息,可以在 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_meta 或 poetry.core.masonry.apipip 会调用这个工具来构建项目。

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

  • 一旦 pip 安装了构建所需的依赖并加载了构建后端,构建后端会被调用来生成源分发包(SDist)和/或轮子包(Wheel)。
    • 如果使用 setuptools.build_meta,它会读取项目的 setup.py 或 setup.cfg 文件来指导包的构建。
    • 这些构建输出会保存在临时目录中,用于接下来的安装步骤。

4. 安装项目

  • pip 使用生成的包(SDist 或 Wheel)安装项目到目标环境中(通常是当前 Python 环境)。
  • 如果项目依赖其他包,pip 会从 pyproject.toml 或 setup.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] 部分来加载构建工具和依赖,然后调用这些工具生成项目的分发包,并最终将其安装到当前环境中。

到此这篇关于python库构建之pyproject.toml配置文件详解的文章就介绍到这了,更多相关python库构建pyproject.toml内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python通过字典dict判断指定键值是否存在的方法

    python通过字典dict判断指定键值是否存在的方法

    这篇文章主要介绍了python通过字典dict判断指定键值是否存在的方法,实例分析了Python中使用has_key及in判断指定键值是否存在的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • Python设计模式之组合模式原理与用法实例分析

    Python设计模式之组合模式原理与用法实例分析

    这篇文章主要介绍了Python设计模式之组合模式,结合具体实例形式分析了Python组合模式的相关概念、原理、定义及使用方法,需要的朋友可以参考下
    2019-01-01
  • python生成ppt的方法

    python生成ppt的方法

    这篇文章主要为大家详细介绍了python生成ppt的方法,通过python生成ppt文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python如何从列表中删除相邻和不相邻的相同元素

    Python如何从列表中删除相邻和不相邻的相同元素

    这篇文章主要介绍了Python如何从列表中删除相邻和不相邻的相同元素问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 详解Python中图像边缘检测算法的实现

    详解Python中图像边缘检测算法的实现

    这篇文章主要为大家详细介绍了python中图像边缘检测算法的原理及实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • python 比较字典value的最大值的几种方法

    python 比较字典value的最大值的几种方法

    这篇文章主要介绍了python 比较字典value的最大值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 史上最快Python版本Python 3.11安装图文教程

    史上最快Python版本Python 3.11安装图文教程

    这篇文章主要介绍了如何在Windows系统上安装Python3.11,并附带了一些关于Python3.11的改进信息,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-11-11
  • Python  MkDocs优雅地编写文档

    Python  MkDocs优雅地编写文档

    在软件开发过程中,编写文档是非常重要的一环,文档不仅可以帮助用户理解和使用你的软件,还可以提高团队协作效率,然传统的文档写作方式往往繁琐而复杂,不易于维护更新,MkDocs工具以简洁、优雅的方式编写文档,并且能够轻松生成漂亮的静态网站
    2024-01-01
  • 关于Python两个列表进行全组合操作的三种方式

    关于Python两个列表进行全组合操作的三种方式

    这篇文章主要介绍了关于Python两个列表进行全组合操作的三种方式,两个元组 (a, b)(c, d),则它们的组合有 a,c a,d b,c b,d,这就叫全组合,需要的朋友可以参考下
    2023-04-04
  • 利用python将xml文件解析成html文件的实现方法

    利用python将xml文件解析成html文件的实现方法

    下面小编就为大家分享一篇利用python将xml文件解析成html文件的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论