Poetry 是一个用于 Python 项目依赖管理和打包的现代化工具。它旨在简化 Python 项目的环境配置、依赖管理以及发布流程,替代传统的 pip
和 setup.py
等工具。Poetry 的核心特点包括:
pyproject.toml
文件管理项目依赖和元数据,取代 requirements.txt
和 setup.cfg
。venv
或 virtualenv
。Poetry 特别适合需要管理复杂依赖的 Python 项目,比如库开发或大型应用。
Homebrew 是安装 pyenv 的推荐方式之一,简单且能自动处理依赖。
brew install pyenv
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)
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
中列出的依赖。
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
如果你使用 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
。
如果开发 Python 库,Poetry 简化了打包和发布到 PyPI 的流程。
打包项目:
poetry build
这会生成 dist/
目录,包含 .tar.gz
和 .whl
文件。
发布到 PyPI:
配置 PyPI 凭证:
poetry config pypi-token.pypi your-api-token
然后发布:
poetry publish
你可以自定义 Poetry 行为,编辑 ~/.config/pypoetry/config.toml
或运行:
poetry config --list
常用设置:
在项目目录内创建虚拟环境:
poetry config virtualenvs.in-project true
这样虚拟环境会存储在项目根目录下的 .venv
。
禁用 Poetry 的自动虚拟环境激活:
poetry config virtualenvs.create false
假设你要创建一个使用 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
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