目录:
在 pyproject.toml 出现之前,Python 项目配置混乱,存在多个文件,如 setup.py、setup.cfg、requirements.txt、.flake8 等,格式不统一,难以管理,pyproject.toml 旨在统一并标准化项目的构建流程、依赖管理和工具配置
pyproject.toml 的优点:
用于告诉包安装工具如 pip,使用什么工具来构建项目。
[build-system]
requires = ["setuptools>=61.0", "wheel"] # 构建所需的依赖包
build-backend = "setuptools.build_meta" # 指定构建后端
如果一个项目没有包含 [build-system] 部分的 pyproject.toml 文件,构建工具(如 pip)会假定它使用一个传统的、基于 setuptools 的构建系统。
默认采用如下配置:
[build-system]
requires = ["setuptools>=40.8.0"]
build-backend = "setuptools.build_meta:__legacy__"
定义了项目的基本信息和运行时依赖,直接替代了 setup.py 中的大部分功能。
[project]
name = "my-awesome-project"
version = "0.1.0"
authors = [{name = "Your Name", email = "your.email@example.com"}]
description = "A short description"
readme = "README.md"
requires-python = ">=3.8" # 指定Python版本要求
license = {text = "MIT"}
# 核心依赖,替代了 setup.py 中的 install_requires 和 requirements.txt
dependencies = [
"requests>=2.28.0",
"numpy",
]
# 可选依赖组,用于开发或特定功能
[project.optional-dependencies]
dev = ["pytest", "black", "flake8"] # 开发依赖
test = ["pytest-cov"]
# 定义命令行脚本入口
[project.scripts]
mycli = "my_package.main:cli"
# 项目相关链接
[project.urls]
Homepage = "https://github.com/username/project"
允许为各种开发工具提供配置,从而消除项目根目录下大量的 .ini、.cfg 文件。
# 代码格式化工具 Black
[tool.black]
line-length = 88
target-version = ['py38']
# 静态代码检查工具
[tool.pyright]
pythonPlatform = "All"
venvPath = "."
venv = ".venv"
# 测试框架 Pytest
[tool.pytest.ini_options]
addopts = "-v"
testpaths = ["tests"]
# 代码检查工具 Ruff
[tool.ruff]
select = ["E", "F"]
在包含 pyproject.toml 文件的目录下执行以下命令,会让 pip 自动解析 pyproject.toml 中 [project] 部分的 dependencies 并安装所有必需的包。
$ pip install .
开发自己的库,在频繁编码和调试时,避免了每改一行代码就重新安装的繁琐过程,可以执行下面的命令:
$ pip install -e .
↶ 返回首页 ↶