[[toml]]
pyproject.toml 是 Python 项目的配置文件,定义了项目的元数据、依赖项、构建工具等。它是 PEP 518 和 PEP 621 的一部分,用于统一配置现代 Python 项目。
基本结构
一个典型的 pyproject.toml 文件包含以下部分:
1. [build-system]
定义项目的构建工具和要求,支持 PEP 518。
1
2
3
| [build-system]
requires = ["setuptools>=42", "wheel"] # 构建所需的工具及版本, 构建项目所需的依赖。
build-backend = "setuptools.build_meta" # 构建后端, 指定用于构建项目的工具。
|
常见的 build-backend 值:
• setuptools.build_meta(默认使用 setuptools)
• poetry.core.masonry.api
• flit_core.buildapi
2. [tool]
为特定工具提供配置。例如:
• poetry
• black
• isort
• 自定义工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [tool.poetry]
name = "my_project" # 项目名称
version = "0.1.0" # 项目版本
description = "A sample Python project" # 项目描述
authors = ["Your Name <your.email@example.com>"]
license = "MIT"
readme = "README.md"
packages = ["my_project"] # 项目包含的包
dependencies = { # 运行时依赖。
python = "^3.8",
requests = "^2.25.1"
}
dev-dependencies = { # 开发时依赖
pytest = "^6.2"
black = "^22.1"
}
|
手动或者工具创建 pyproject.toml
1. 手动创建
直接创建 pyproject.toml 文件,并按照上面格式填写。
2. 使用工具生成
• Poetry
初始化项目并生成 pyproject.toml:
1
2
3
4
5
| poetry init
# 安装依赖并更新到 pyproject.toml:
poetry add <package_name>
poetry add --dev <dev_package_name>
|
• 其他工具
• 使用 cookiecutter 模板生成。
• 使用 IDE(如 PyCharm)的模板。
用法/ 应用场景
1. 作为构建配置文件
如果项目需要打包和分发,pyproject.toml 是现代的替代方案,可以取代传统的 setup.py 和 setup.cfg。
2. 配置开发工具
常见工具的配置:
1
2
3
4
5
6
7
8
9
10
11
| [tool.black] # 配置代码格式化
line-length = 88
target-version = ["py38"]
[tool.isort] # 配置导入排序工具
profile = "black"
line_length = 88
[tool.pytest.ini_options] # 配置测试工具
minversion = "6.0"
addopts = "--strict-markers"
|
3. 配置依赖管理
通过 poetry 或 pip 读取依赖。
1
2
3
4
5
6
7
8
| # 安装项目依赖
pip install .
# 安装开发依赖:
pip install .[dev]
# 开源项目中常见使用editable模式
pip install -e .
pip install -e .[dev]
|
优点
- 统一性:将构建、依赖和工具配置集中在一个文件中。
- 兼容性:支持主流的构建工具和依赖管理器。
- 简洁性:TOML 格式易读易写,适合手动编辑。
示例文件
完整的 pyproject.toml 示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| [build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[tool.poetry]
name = "my_project"
version = "0.1.0"
description = "A sample Python project"
authors = ["Your Name <your.email@example.com>"]
license = "MIT"
readme = "README.md"
packages = ["my_project"]
dependencies = {
python = "^3.8", # ^的含义是至少是,保证版本号从左往右第一个不为0的数字一样,后面的可以不同
requests = "^2.25.1"
}
dev-dependencies = {
pytest = "^6.2",
black = "^22.1"
}
[tool.black]
line-length = 88
target-version = ["py38"]
[tool.isort]
profile = "black"
line_length = 88
|
总结
pyproject.toml 是现代 Python 项目配置的核心文件。通过它,项目的构建、依赖管理和开发工具配置变得更加统一和规范。在实际使用中,可根据需求选择支持的工具(如 Poetry 或 [[setuptools]]),灵活配置项目结构。
💬 评论