poetry介绍

半兽人 发表于: 2025-04-14   最后更新时间: 2025-04-14 14:24:57  
{{totalSubscript}} 订阅, 57 游览

什么是 Poetry?

Poetry 是一个用于 Python 项目依赖管理和打包的现代化工具。它旨在简化 Python 项目的环境配置、依赖管理以及发布流程,替代传统的 pipsetup.py 等工具。Poetry 的核心特点包括:

  • 统一依赖管理:通过 pyproject.toml 文件管理项目依赖和元数据,取代 requirements.txtsetup.cfg
  • 虚拟环境自动管理:Poetry 自动为项目创建隔离的虚拟环境,无需手动使用 venvvirtualenv
  • 精确依赖解析:确保依赖版本兼容,避免冲突。
  • 打包与发布:简化将项目打包并发布到 PyPI 的流程。
  • 跨平台支持:适用于 macOS、Linux 和 Windows。

Poetry 特别适合需要管理复杂依赖的 Python 项目,比如库开发或大型应用。

在 macOS 上安装和使用 Poetry

1. 安装 Poetry

Homebrew 是安装 pyenv 的推荐方式之一,简单且能自动处理依赖。

步骤:
brew install pyenv

2. 创建新项目

Poetry 可以快速初始化一个新的 Python 项目。

步骤:
  1. 创建项目目录

    mkdir my-project
    cd my-project
    
  2. 初始化项目

    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"
    
  3. (可选)从现有项目导入
    如果已有 requirements.txt,可以用:

    poetry add $(cat requirements.txt)
    

3. 管理依赖

Poetry 简化了添加、更新和移除依赖的操作。

常用命令:
  1. 添加依赖

    poetry add requests
    

    这会安装 requests 库并更新 pyproject.tomlpoetry.lock 文件。poetry.lock 确保依赖版本一致。

    指定版本:

    poetry add requests@^2.28.0
    
  2. 添加开发依赖(如测试工具):

    poetry add pytest --group dev
    
  3. 移除依赖

    poetry remove requests
    
  4. 安装项目依赖
    在已有项目中,运行以下命令安装所有依赖:

    poetry install
    

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


4. 使用虚拟环境

Poetry 自动为项目创建虚拟环境,存放在 ~/.cache/pypoetry/virtualenvs 或项目目录内(可配置)。

常用命令:
  1. 激活虚拟环境

    poetry shell
    

    这会进入项目的虚拟环境,提示符会显示类似 (my-project-py3.10)

  2. 运行命令(无需进入 shell):

    poetry run python my_script.py
    

    或运行其他工具:

    poetry run pytest
    
  3. 查看虚拟环境路径

    poetry env info
    
  4. 删除虚拟环境

    poetry env remove python3.10
    

5. 结合 pyenv

如果你使用 pyenv(如前面讨论)管理 Python 版本,可以让 Poetry 使用特定的 Python 版本。

步骤:
  1. 设置项目 Python 版本
    在项目目录下,设置 pyenv 的本地版本:

    pyenv local 3.10.6
    
  2. 让 Poetry 使用该版本
    初始化项目或更新 Poetry 配置:

    poetry env use ~/.pyenv/versions/3.10.6/bin/python
    
  3. 验证

    poetry run python --version
    

    确保显示 Python 3.10.6


6. 打包和发布项目

如果开发 Python 库,Poetry 简化了打包和发布到 PyPI 的流程。

步骤:
  1. 打包项目

    poetry build
    

    这会生成 dist/ 目录,包含 .tar.gz.whl 文件。

  2. 发布到 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 库的项目:

  1. 设置 pyenv

    pyenv install 3.10.6
    pyenv local 3.10.6
    
  2. 初始化项目

    mkdir my-project
    cd my-project
    poetry init --no-interaction --python "^3.10"
    
  3. 添加依赖

    poetry add requests
    
  4. 创建脚本(如 main.py):

    import requests
    print(requests.get("https://api.github.com").json())
    
  5. 运行

    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 管理项目依赖和隔离环境。
更新于 2025-04-14
在线,11小时前登录

查看python更多相关的文章或提一个关于python的问题,也可以与我们一起分享文章