目次
前言
pyproject.toml 是一个配置文件,用于定义 Python 项目的构建系统和相关的元数据。它是 Python 社区为相识决项目构建和依靠管理问题而引入的一种标准化方式,最初由 PEP 518 提出。[code]pyproject.toml[/code] 文件被广泛使用,尤其是在构建工具(如 [code]Poetry[/code] 和 [code]Flit[/code])中,用来替代传统的 [code]setup.cfg[/code] 文件。
重要用途
定义构建系统:
- [code]pyproject.toml[/code] 文件中可以指定构建工具及其版本,如 [code]setuptools[/code] 或 [code]poetry[/code],以及这些工具所需的依靠项。这使得项目的构建环境更加可控和可重复。
项目元数据:
- 包括项目的名称、版本、形貌、作者、允许证等信息,可以在 [code]pyproject.toml[/code] 文件中定义。这些信息可以被构建工具或包管理工具读取和使用。
依靠管理:
- 该文件可以管理项目的依靠关系,包括运行时依靠、开辟时依靠等,类似于 [code]requirements.txt[/code],但更加布局化和灵活。
配置构建工具的行为:
- 对于不同的构建工具,如 [code]setuptools[/code]、[code]poetry[/code]、[code]black[/code]、[code]isort[/code] 等,可以在 [code]pyproject.toml[/code] 中配置其行为。
文件布局
一个典型的 [code]pyproject.toml[/code] 文件由几个部分构成,每个部分对应不同的功能和配置信息。以下是LlamaFactory示例:
[code][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"
[/code]
这个 [code]pyproject.toml[/code] 文件配置了项目的构建系统以及使用 [code]ruff[/code] 举行代码查抄和格式化的相关设置。以下是各部分的具体解释:
1. [build-system]
[code]requires[/code]: 指定了项目的构建系统依靠项。这里要求使用 [code]setuptools[/code] 版本 61.0 或更高版本。这意味着在构建这个项目时,Python 环境中必须安装 [code]setuptools[/code],且版本不低于 61.0。 [code]build-backend[/code]: 指定了用于构建项目的后端工具,这里使用的是 [code]setuptools.build_meta[/code]。这意味着 [code]setuptools[/code] 将作为构建过程的核心工具。
2. [tool.ruff]
[code]target-version[/code]: 指定了代码的目的 Python 版本,这里是 Python 3.8 ([code]py38[/code])。[code]ruff[/code] 将根据这个版本举行相应的查抄和优化。 [code]line-length[/code]: 指定了代码行的最大长度,超过这个长度会被视为格式错误。这里设置为 119 个字符。 [code]indent-width[/code]: 指定代码缩进的宽度,这里设置为 4 个空格。
3. [tool.ruff.lint]
4. [tool.ruff.lint.isort]
[code]lines-after-imports[/code]: 指定在导入语句之后应保留的空行数,这里设置为 2 行。 [code]known-first-party[/code]: 列出了项目中的第一方模块,即 [code]llamafactory[/code],用于在导入排序时识别项目内部的模块。 [code]known-third-party[/code]: 列出了已知的第三方库,这些库将在导入排序时与其他模块区分开来。
5. [tool.ruff.format]
[code]quote-style[/code]: 指定字符串使用的引号样式,这里设置为 [code]double[/code],即双引号。 [code]indent-style[/code]: 指定缩进风格,这里使用 [code]space[/code](空格)而非 [code]tab[/code]。 [code]docstring-code-format[/code]: 设置为 [code]true[/code],表示在文档字符串(docstring)中也会应用代码格式化规则。 [code]skip-magic-trailing-comma[/code]: 设置为 [code]false[/code],意味着纵然添加把戏尾逗号(magic trailing comma),也不会跳过格式化。 [code]line-ending[/code]: 设置为 [code]auto[/code],表示根据利用系统的默认设置自动选择行末端符。
小结
这个 [code]pyproject.toml[/code] 文件重要配置了项目的构建系统,并具体定义了 [code]ruff[/code] 工具用于代码风格查抄和格式化的规则。这些设置帮助确保代码的一致性和质量,减少错误,并遵照团队的编码规范。
工作流程
在实行 [code]pip install .[/code] 时,[code]pyproject.toml[/code] 文件会在构建和安装 Python 项目的过程中被引用。具体流程如下:
1. 识别 pyproject.toml 文件
- 当你在项目的根目次实行 [code]pip install .[/code] 下令时,[code]pip[/code] 会起首查抄该目次下是否存在 [code]pyproject.toml[/code] 文件。
- 假如存在这个文件,[code]pip[/code] 会将其视为该项目的构建配置文件,并按照此中的内容来指导接下来的构建过程。
2. 剖析 build-system 部分
- [code]pip[/code] 起首读取 [code]pyproject.toml[/code] 文件中的 [code][build-system][/code] 部分。这一部分定义了构建项目所需的依靠项以及构建后端(即构建工具)。
- [code]requires[/code]: 列出了构建这个项目所需的 Python 包。在实行 [code]pip install .[/code] 时,[code]pip[/code] 会确保这些包已经安装。假如这些包没有安装,[code]pip[/code] 会起首安装这些依靠。
- [code]build-backend[/code]: 指定构建项目所使用的后端工具,好比 [code]setuptools.build_meta[/code] 或 [code]poetry.core.masonry.api[/code]。[code]pip[/code] 会调用这个工具来构建项目。
3. 构建源分发包(SDist)和/或轮子包(Wheel)
- 一旦 [code]pip[/code] 安装了构建所需的依靠并加载了构建后端,构建后端会被调用来天生源分发包(SDist)和/或轮子包(Wheel)。
- 假如使用 [code]setuptools.build_meta[/code],它会读取项目的 [code]setup.py[/code] 或 [code]setup.cfg[/code] 文件来指导包的构建。
- 这些构建输出会生存在临时目次中,用于接下来的安装步调。
4. 安装项目
- [code]pip[/code] 使用天生的包(SDist 或 Wheel)安装项目到目的环境中(通常是当前 Python 环境)。
- 假如项目依靠其他包,[code]pip[/code] 会从 [code]pyproject.toml[/code] 或 [code]setup.py[/code] 中的 [code]install_requires[/code] 列表中识别并安装这些依靠。
5. 其他工具配置
- [code]pyproject.toml[/code] 中的其他部分,如 [code][tool.ruff][/code],大概会被相应的工具在构建或开辟过程中引用。固然这些部分不会直接影响 [code]pip install .[/code] 的过程,但它们在开辟环境中依然重要。
简化的实行流程
- [code]pip[/code] 查抄并加载 [code]pyproject.toml[/code] 文件。
- 剖析 [code]build-system[/code],安装构建所需的依靠。
- 使用指定的构建后端构建项目(天生 SDist 和/或 Wheel)。
- 安装天生的包及其依靠。
总结
[code]pyproject.toml[/code] 文件在 [code]pip install .[/code] 的过程中会被 [code]pip[/code] 引用,以确定如何构建和安装项目。[code]pip[/code] 重要使用此中的 [code][build-system][/code] 部分来加载构建工具和依靠,然后调用这些工具天生项目的分发包,并终极将其安装到当前环境中。
到此这篇关于python库构建之pyproject.toml配置文件详解的文章就介绍到这了,更多相关python库构建pyproject.toml内容请搜索脚本之家从前的文章或继续欣赏下面的相关文章盼望大家以后多多支持脚本之家! 来源:https://www.jb51.net/python/328042dl8.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |