pyproject.toml 有什么作用呢?
🧠 一、一句话总结它的作用:
pyproject.toml
是用来定义 Python 项目的元信息和构建系统配置的文件。
可以把它看作是 setup.py
和 setup.cfg
的现代化替代品,它更加标准化、结构清晰,并且被大多数现代打包工具(如 hatch
, poetry
, flit
, setuptools
等)支持。
🧩 二、这个文件在整个项目中的地位?
文件 | 作用 |
---|---|
pyproject.toml | 项目的元数据 + 构建配置 |
README.md | 项目的介绍文档 |
LICENSE | 开源协议 |
src/ 目录 | Python 源代码目录 |
mkdocs.yml | 文档网站配置 |
pyproject.toml
是 Python 项目打包、发布、安装的核心配置文件之一。
🎯 三、我应该注意什么?
✅ 建议了解并掌握以下几点:
内容 | 建议 |
---|---|
✅ pyproject.toml 的格式 | 学习 TOML 格式语法,结构清晰易读 |
✅ 如何添加依赖 | 添加新依赖时记得更新 dependencies |
✅ 如何发布包 | 如果你要发布自己的包,要熟悉 build 和 twine |
✅ 如何定义 CLI 命令 | 通过 [project.scripts] 定义命令行工具 |
✅ 如何跨平台打包资源 | 用 force-include 把可执行文件也打包进去 |
🧾 四、对比传统方式
旧方式(setup.py) | 新方式(pyproject.toml) |
---|---|
需要写 Python 脚本 | 纯文本配置,更安全 |
容易出错 | 更加结构化 |
不够标准化 | 符合 PEP 517/518 标准 |
不易维护 | 易读、易扩展 |
🧱 五、举个生活中的例子(类比)
想象你要开一家餐厅:
- 你有一个厨房(写代码的地方);
- 你在厨房里做了很多道菜(写了多个 Python 文件);
- 现在你想让顾客点菜(别人使用你的代码);
- 你就需要一份菜单(
pyproject.toml
),告诉顾客:- 菜名是什么?
- 做这道菜需要哪些原材料?(依赖)
- 哪些是招牌菜?(命令行工具)
- 是谁做的这道菜?(作者信息)
所以,当你要对外提供服务或产品时,你就需要这份菜单 —— 对应到 Python 中,就是 pyproject.toml
。
🧪 六、从编程角度:什么情况下会需要它?
场景 | 是否需要 pyproject.toml | 说明 |
---|---|---|
✅ 写了一个算法库,想发到 PyPI | ✅ 必须 | 用于描述包的元信息和构建方式 |
✅ 想让别人通过 pip 安装你的项目 | ✅ 必须 | pip 会读取这个文件来安装依赖 |
✅ 你希望别人能运行你的命令行工具(如 mytool run ) | ✅ 推荐 | 配置 CLI 入口 |
✅ 使用现代工具管理项目(如 Hatch / Poetry) | ✅ 必须 | 它们都基于这个文件 |
❌ 只是一个脚本,不打算打包 | ❌ 不需要 | 比如写个 .py 文件跑个模型,不需要打包 |
❌ 团队内部简单调用,不对外发布 | ❌ 不强制 | 但推荐尽早使用 |
✅ 七、总结一下
问题 | 回答 |
---|---|
pyproject.toml 是什么? | 是现代 Python 项目的元数据和构建配置文件 |
有什么作用? | 定义项目名称、版本、依赖、脚本、构建方式等 |
为什么重要? | 是打包、安装、发布的基础,也是现代 Python 工程化的关键 |
我应该怎么用? | 熟悉其结构,合理管理依赖、脚本、平台适配等内容 |
如果以后想自己开发 Python 包,或者参与开源项目,pyproject.toml
是必须掌握的内容之一。