1. 为什么需要 Poetry?
在 Python 项目中,依赖管理和环境隔离 一直是开发者的痛点。传统上我们用 pip
+ virtualenv
,虽然能解决问题,但维护复杂依赖时会显得笨重。Poetry 的出现,让 Python 的项目管理更优雅、更现代化。
对比其他语言的情况:
- JavaScript 有
npm
和yarn
,一行命令就能安装依赖并生成package.json
、package-lock.json
。 - Rust 有
cargo
,集依赖管理、构建、发布于一体。 - Go 使用
go mod
来处理模块依赖。 - 而 Python 过去并没有一个"一站式工具",Poetry 正是填补了这一空白。
2. 安装 Poetry
Poetry 本身提供了独立安装方式,无需绑定到系统的 Python,避免全局污染。
arduino
curl -sSL https://install.python-poetry.org | python3 -
安装完成后,你可以用 poetry --version
来检查是否成功。
相比之下:
npm
是随 Node.js 一起安装的。cargo
是随 Rust 工具链安装的。- Poetry 单独安装,保证了独立性和跨平台一致性。
3. 项目初始化
创建一个新项目只需要一行命令:
arduino
poetry new my_project
这会生成一个标准化目录结构,包括 pyproject.toml
(相当于 Python 世界里的 package.json
)。
- 在 Node.js 中,这个文件是
package.json
。 - 在 Rust 中,则是
Cargo.toml
。 - 在 Go 中则是
go.mod
。
Poetry 的 pyproject.toml
已经逐渐成为 Python 社区的统一标准。
4. 添加与管理依赖
安装依赖只需:
csharp
poetry add requests
Poetry 会自动更新 pyproject.toml
和 poetry.lock
文件,保证团队成员依赖一致。
类比:
- Node.js →
npm install express --save
- Rust →
cargo add serde
- Go →
go get github.com/gin-gonic/gin
可见,Poetry 的体验已经和这些现代语言生态保持一致。
5. 环境与运行
Poetry 内置了虚拟环境管理,不需要额外安装 venv
或 virtualenv
:
arduino
poetry shell
poetry run python main.py
这让环境切换和运行更自然。
6. 打包与发布
当你要发布到 PyPI 时,只需要:
poetry build
poetry publish
流程和 Rust 的 cargo publish
非常相似,也避免了传统 setup.py
的繁琐。
7. 总结
Poetry 让 Python 开发者拥有了和其他语言相媲美的现代化工具链:
- 统一的依赖声明 (
pyproject.toml
) - 可复现的安装结果 (
poetry.lock
) - 内置环境隔离(无需额外工具)
- 一站式项目管理(构建、发布一条龙)
如果你过去在 Python 项目里被"依赖地狱"困扰,那么 Poetry 将是一次质的飞跃。