什么是 Poetry?

Poetry 是一个现代化的 Python 依赖管理和打包工具,旨在取代 pip、virtualenv、setup.py 和 requirements.txt,提供更好的依赖管理体验。

Poetry 解决了 pipenv 的性能问题,并且支持包发布,适合 Python 项目和库的开发。

Poetry 的特点

一体化管理:同时管理依赖、虚拟环境和 Python 包发布。

自动解析依赖:避免版本冲突,解析速度比 pipenv 更快。

基于 pyproject.toml:符合 PEP 518 规范,取代 setup.py 和 requirements.txt。

锁定依赖:使用 poetry.lock 确保项目可复现。

内置虚拟环境:无需手动管理 venv,自动创建隔离环境。

发布 Python 包:一键发布到 PyPI (poetry publish)。

安装 Poetry

官方推荐

curl -sSL https://install.python-poetry.org | python3 -

安装完成后,建议将 poetry 添加到 PATH:

export PATH="$HOME/.local/bin:$PATH"

使用 pip

pip install poetry

验证安装

poetry --version

创建和管理项目

创建新项目

poetry new myproject

这将创建如下结构:

myproject/
├── pyproject.toml  # 依赖和项目配置文件
├── README.rst
├── myproject/
│   └── __init__.py
└── tests/

在已有项目中初始化 Poetry

如果已有 Python 项目(比如 Git 克隆下来的代码),可以在项目目录下运行:

poetry init

Poetry 会引导你配置 pyproject.toml。

依赖管理

添加依赖

安装 requests:

poetry add requests

安装 flask,但只用于开发环境:

poetry add --dev flask

移除依赖

poetry remove requests

安装所有依赖

poetry install

Poetry 会自动创建虚拟环境,并安装 pyproject.toml 中的依赖。

依赖版本控制

Poetry 允许你控制依赖的版本范围:

poetry add "requests>=2.20,<3.0"

生成 requirements.txt

如果需要导出 requirements.txt(比如部署到服务器),可以运行:

poetry export -f requirements.txt --output requirements.txt

运行和管理虚拟环境

进入虚拟环境

eval $(poetry env activate)

运行 Python 脚本

poetry run python script.py

运行 CLI 命令

poetry run pytest

查看当前虚拟环境

poetry env info

发布 Python 包

如果你要发布一个 Python 库,Poetry 也能帮你自动管理版本和上传到 PyPI。

构建项目

poetry build

会生成 .tar.gz 和 .whl 文件。

发布到 PyPI

poetry publish

如果需要提供 PyPI 账号:

poetry publish --username myuser --password mypassword

配置与高级用法

设置 Python 版本

poetry env use python3.11

全局配置

查看配置:

poetry config --list

设置 PyPI 镜像(比如国内源):

poetry config repositories.pypi https://pypi.tuna.tsinghua.edu.cn

总结

Poetry 是 Python 开发的最佳实践,特别适用于现代项目和库开发。

比 pipenv 更快、更稳定,支持依赖管理 + 虚拟环境 + PyPI 发布

基于 pyproject.toml,符合 PEP 518 标准,未来兼容性更好。

对于一般 Python 项目和库开发,Poetry 是当前最推荐的工具!