poetry

poetry

声明式管理 Python 依赖并生成锁文件,同时负责项目打包与发布

核心功能

用一份 pyproject.toml 声明项目依赖,由 Poetry 负责解析、安装和更新,并写出 poetry.lock 保证每个人和 CI 装到完全相同的版本。适合需要可复现依赖、又要把项目打包成 sdist / wheel 发布到包索引的 Python 应用与库开发者。

功能亮点

可复现的锁文件

poetry.lock 固定每个依赖的精确版本,团队、CI 与生产环境安装结果完全一致

丰富的版本约束语法

支持 caret、tilde、通配符、不等式以及多重约束等多种依赖声明写法

环境自动托管

自动为项目建虚拟环境,也会识别并沿用你在外部已激活的环境

打包发布一条龙

同一份配置既管依赖,也能 build 出分发包并 publish 到包索引

库与应用双模式

package-mode = false 时只管依赖不做打包,name、version 等元数据可省略

适用场景

• 为 Python 应用锁定依赖版本,让团队成员、CI 与生产机器装到完全相同的包
• 开发要发布到 PyPI 的 Python 库,用同一份配置完成构建与上传
• 只做依赖管理不打包的项目,开启 non-package 模式统一管理环境

安装配置

bash
pipx(官方首选方式,需先装好 pipx):
pipx install poetry

pipx 安装指定版本:
pipx install poetry==1.8.4

pipx 升级 / 卸载:
pipx upgrade poetry
pipx uninstall poetry

官方安装脚本 —— Linux / macOS / Windows (WSL):
curl -sSL https://install.python-poetry.org | python3 -

官方安装脚本 —— Windows (PowerShell):
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

指定安装版本:
curl -sSL https://install.python-poetry.org | python3 - --version 1.8.4

说明:Poetry 需要 Python 3.10 及以上版本。

使用方法

bash
poetry new poetry-demo    # 新建项目(默认 src 布局)
poetry init               # 在已有目录交互式生成 pyproject.toml
poetry add pendulum       # 添加依赖,自动选定版本约束并安装
poetry remove pendulum    # 移除依赖
poetry install            # 按 pyproject.toml / poetry.lock 安装依赖
poetry install --no-root  # 只装依赖,不安装项目本身
poetry update             # 更新到符合约束的最新版本并刷新锁文件
poetry lock               # 只锁定依赖,不执行安装
poetry run python your_script.py   # 在项目环境中运行脚本
poetry run pytest         # 在项目环境中运行命令行工具
eval "$(poetry env activate)"      # 激活项目虚拟环境
poetry show               # 列出所有可用包
poetry check              # 校验 pyproject.toml 及其与锁文件的一致性
poetry build              # 构建 sdist 与 wheel
poetry publish            # 发布到远程仓库
poetry version            # 查看或递增项目版本号

关键指标

尚未核验对标产品,此处只列本工具自身指标,不做对比结论。

指标poetry
价格免费
开源
上手难度进阶

相关工具

同类工具

优点

  • poetry.lock 记录精确版本并可提交到版本库,团队与 CI 的依赖完全对齐
  • 一份 pyproject.toml 同时承担依赖声明、虚拟环境、构建与发布四件事
  • poetry add 会自动推算合适的版本约束并连同子依赖一起装好,不用手写版本号
  • 会识别并尊重外部已激活的虚拟环境,可与 conda、pyenv 等既有流程共存

缺点

  • 不会替你安装 Python 解释器,必须自备满足 requires-python 约束的解释器
  • 安装 Poetry 本身要求 Python 3.10 及以上,老环境需要先升级
  • 缺少 poetry.lock 时每次安装前都要重新解析,依赖多时锁定耗时明显