什么是 Poetry?
Poetry 是一个用于 Python 项目依赖管理和打包的现代化工具。它旨在简化 Python 项目的环境配置、依赖管理以及发布流程,替代传统的 pip
和 setup.py
等工具。Poetry 的核心特点包括:
- 统一依赖管理:通过
pyproject.toml
文件管理项目依赖和元数据,取代requirements.txt
和setup.cfg
。 - 虚拟环境自动管理:Poetry 自动为项目创建隔离的虚拟环境,无需手动使用
venv
或virtualenv
。 - 精确依赖解析:确保依赖版本兼容,避免冲突。
- 打包与发布:简化将项目打包并发布到 PyPI 的流程。
- 跨平台支持:适用于 macOS、Linux 和 Windows。
Poetry 特别适合需要管理复杂依赖的 Python 项目,比如库开发或大型应用。
在 macOS 上安装和使用 Poetry
1. 安装 Poetry
Homebrew 是安装 pyenv 的推荐方式之一,简单且能自动处理依赖。
步骤:
brew install pyenv
2. 创建新项目
Poetry 可以快速初始化一个新的 Python 项目。
步骤:
创建项目目录:
mkdir my-project cd my-project
初始化项目:
poetry init
这会交互式地询问项目名称、版本、作者等信息,生成一个
pyproject.toml
文件。你也可以直接用默认值:poetry init --no-interaction
示例
pyproject.toml
:[tool.poetry] name = "my-project" version = "0.1.0" description = "" authors = ["Your Name <you@example.com>"] [tool.poetry.dependencies] python = "^3.10" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
(可选)从现有项目导入:
如果已有requirements.txt
,可以用:poetry add $(cat requirements.txt)
3. 管理依赖
Poetry 简化了添加、更新和移除依赖的操作。
常用命令:
添加依赖:
poetry add requests
这会安装
requests
库并更新pyproject.toml
和poetry.lock
文件。poetry.lock
确保依赖版本一致。指定版本:
poetry add requests@^2.28.0
添加开发依赖(如测试工具):
poetry add pytest --group dev
移除依赖:
poetry remove requests
安装项目依赖:
在已有项目中,运行以下命令安装所有依赖:poetry install
这会自动创建虚拟环境并安装
pyproject.toml
中列出的依赖。
4. 使用虚拟环境
Poetry 自动为项目创建虚拟环境,存放在 ~/.cache/pypoetry/virtualenvs
或项目目录内(可配置)。
常用命令:
激活虚拟环境:
poetry shell
这会进入项目的虚拟环境,提示符会显示类似
(my-project-py3.10)
。运行命令(无需进入 shell):
poetry run python my_script.py
或运行其他工具:
poetry run pytest
查看虚拟环境路径:
poetry env info
删除虚拟环境:
poetry env remove python3.10
5. 结合 pyenv
如果你使用 pyenv(如前面讨论)管理 Python 版本,可以让 Poetry 使用特定的 Python 版本。
步骤:
设置项目 Python 版本:
在项目目录下,设置 pyenv 的本地版本:pyenv local 3.10.6
让 Poetry 使用该版本:
初始化项目或更新 Poetry 配置:poetry env use ~/.pyenv/versions/3.10.6/bin/python
验证:
poetry run python --version
确保显示
Python 3.10.6
。
6. 打包和发布项目
如果开发 Python 库,Poetry 简化了打包和发布到 PyPI 的流程。
步骤:
打包项目:
poetry build
这会生成
dist/
目录,包含.tar.gz
和.whl
文件。发布到 PyPI:
配置 PyPI 凭证:poetry config pypi-token.pypi your-api-token
然后发布:
poetry publish
7. 常用配置
你可以自定义 Poetry 行为,编辑 ~/.config/pypoetry/config.toml
或运行:
poetry config --list
常用设置:
在项目目录内创建虚拟环境:
poetry config virtualenvs.in-project true
这样虚拟环境会存储在项目根目录下的
.venv
。禁用 Poetry 的自动虚拟环境激活:
poetry config virtualenvs.create false
8. 简单示例工作流
假设你要创建一个使用 Python 3.10.6 和 requests
库的项目:
设置 pyenv:
pyenv install 3.10.6 pyenv local 3.10.6
初始化项目:
mkdir my-project cd my-project poetry init --no-interaction --python "^3.10"
添加依赖:
poetry add requests
创建脚本(如
main.py
):import requests print(requests.get("https://api.github.com").json())
运行:
poetry shell python main.py
或:
poetry run python main.py
9. 常见问题解决
Poetry 找不到 Python 版本:
确保 pyenv 中的 Python 版本可用:pyenv versions poetry env use ~/.pyenv/versions/3.10.6/bin/python
依赖冲突:
检查poetry.lock
或运行:poetry install --sync
更新 Poetry:
poetry self update
清理缓存:
如果遇到奇怪问题,清理缓存:rm -rf ~/.cache/pypoetry
Poetry vs. pyenv
- pyenv:管理多个 Python 版本,控制解释器级别。
- Poetry:管理项目依赖和虚拟环境,控制包级别。
- 结合使用:用 pyenv 指定 Python 版本,Poetry 管理项目依赖和隔离环境。