【Python 语法】pyproject.toml

2024-01-15 00:00:00

目录:

pyproject.toml 介绍

在 pyproject.toml 出现之前,Python 项目配置混乱,存在多个文件,如 setup.py、setup.cfg、requirements.txt、.flake8 等,格式不统一,难以管理,pyproject.toml 旨在统一并标准化项目的构建流程、依赖管理和工具配置

pyproject.toml 的优点:

  • 统一配置入口: 将项目元数据、依赖声明、构建系统配置以及各种开发工具,如代码格式化、测试框架的配置集中在一个文件中,使项目结构更清晰;
  • 声明式与标准化: 作为静态的 TOML 文件,它只声明“是什么”,而非像 setup.py 那样执行代码;
  • 构建系统解耦: 允许项目自由选择构建后端,如 setuptools、poetry、flit、hatch,而不再与 setuptools 强绑定;
  • 提升协作效率: 标准化的配置使得其他开发者能更轻松地理解、安装和运行项目。

配置: build-system

用于告诉包安装工具如 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__"

配置: project

定义了项目的基本信息和运行时依赖,直接替代了 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"

配置: tool.*

允许为各种开发工具提供配置,从而消除项目根目录下大量的 .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 .

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: