什么是 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 管理项目依赖和隔离环境。
