Poetry 是一个现代的Python包管理工具,它解决了很多传统工具如 pipvirtualenv 组合使用时遇到的问题,同时还集成了包的依赖管理和发布功能。

为什么使用 Poetry

  1. 依赖管理和版本控制Poetry 自动处理项目的依赖关系,并确保解决方案的一致性。它通过 pyproject.tomlpoetry.lock 文件精确控制依赖版本,避免了依赖地狱。
  2. 简化虚拟环境管理Poetry 自动创建和管理虚拟环境,无需手动使用 virtualenv。这意味着每个项目都有自己独立的环境,从而避免了包版本冲突。
  3. 一体化工作流:从创建项目、添加依赖、安装依赖到打包和发布,Poetry 提供了一套一致的命令接口,简化了工作流程。
  4. 便于项目协作:通过将 pyproject.tomlpoetry.lock 文件加入版本控制,团队成员可以确保在不同的开发环境中使用完全相同的依赖,从而减少“在我机器上能运行”这类问题。

安装 Poetry

首先,需要安装 Poetry。官方推荐的安装方式是使用其安装脚本,以确保安装最新版本:

1
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

或者,对于 Unix/Linux 系统,可以使用新的安装方式:

1
curl -sSL https://install.python-poetry.org | python3 -

Poetry 会被安装在系统中的如下位置:

  • $HOME/.local/bin

常见的 Poetry 用法

  • 初始化新项目:poetry newpoetry init
  • 添加依赖:poetry add requestspoetry add pytest --dev(添加开发依赖)
  • 安装依赖:poetry install
  • 更新依赖:poetry updatepoetry update requests
  • 打包和发布:poetry buildpoetry publish(发布到PyPi)
  • 运行命令:poetry run commandpoetry run python my_script.py

文件结构解析

Poetry 主要使用两个文件来管理项目的包信息和依赖:

  1. **pyproject.toml**:这是一个TOML(Tom’s Obvious, Minimal Language)格式的文件,用于声明项目的元数据、依赖和配置。pyproject.toml 文件使得项目的构建系统变得更加标准化和一致。以下是一个简单的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [tool.poetry]
    name = "example-project"
    version = "0.1.0"
    description = "An example project"
    authors = ["Your Name <you@example.com>"]

    [tool.poetry.dependencies]
    python = "^3.8"
    requests = "^2.25.1"

    [tool.poetry.dev-dependencies]
    pytest = "^6.2.2"

    在这个文件中,你可以定义项目的名称、版本、描述、作者等信息,以及项目的依赖和开发依赖。

  2. **poetry.lock**:这个文件被 Poetry 自动生成,用于锁定项目依赖的具体版本,确保在不同环境中的一致性。它包含了直接依赖和间接依赖(即依赖的依赖)的详细信息,包括包的版本、来源等。poetry.lock 文件应该被加入到版本控制系统中,以确保所有环境中的依赖一致。

通过使用 Poetry 和这些文件,Python开发者可以更加高效、一致地管理项目的依赖和打包过程,从而提升开发效率和项目质量。