Poetry 又一个 Python 依赖管理工具

Posted on Sun 16 March 2025 in Journal

Abstract Poetry
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2025-03-16
License CC-BY-NC-ND 4.0

Python 依赖管理工具或者叫做环境隔离工具最有句莫过于 virtualenv, 随之而来的还有类似的 virtualenvwrapper, conda, pipenv等等. 而 Poetry 也是一个 Python 依赖管理和打包工具,它可以帮助开发者更轻松地管理项目依赖、虚拟环境和软件发布, 最后一点, 也是它更加方便的地方.


🔹 为什么使用 Poetry?

  1. 管理依赖:使用 pyproject.toml 记录所有依赖,避免 requirements.txt 过于混乱。
  2. 自动管理虚拟环境:无需手动创建 venv,Poetry 会自动处理。
  3. 提供 poetry.lock 文件:保证依赖的一致性,防止版本冲突。
  4. 轻松发布 Python 包:可直接使用 poetry publish 发布到 PyPI。

🔹 安装 Poetry

方法 1:官方推荐

在 Linux 和 macOS 上,运行:

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

方法 2:使用 pipx(推荐)

pipx install poetry

检查安装是否成功

poetry --version

🔹 创建新项目

创建一个新的 Python 项目:

poetry new my_project
cd my_project

📂 目录结构:

my_project/
│── pyproject.toml    # 项目元数据和依赖管理
│── poetry.lock       # 锁定依赖,确保版本一致
│── my_project/       # 源代码目录
│   ├── __init__.py
│── tests/            # 测试代码
│── README.rst

🔹 添加和安装依赖

添加项目依赖

poetry add requests

📌 这将在 pyproject.toml 里添加 requests,并自动安装它。

添加开发依赖

poetry add --dev pytest

📌 适用于测试工具等仅开发环境需要的依赖。

安装所有依赖

如果你从 GitHub 或其他地方克隆了一个使用 Poetry 的项目,可以用:

poetry install

📌 这会创建一个虚拟环境,并安装 pyproject.toml 里列出的所有依赖。


🔹 运行 Python 代码

直接运行 Python 文件

poetry run python main.py

启动 Poetry 的虚拟环境

poetry shell

📌 进入虚拟环境后,可以像普通 Python 环境一样运行代码:

python main.py

🔹 示例:使用 Poetry 创建一个简单项目

1️⃣ 创建一个新项目

poetry new poetry_example
cd poetry_example

2️⃣ 添加 requests

poetry add requests

3️⃣ 编写代码

编辑 poetry_example/__init__.py

import requests

def fetch_data():
    response = requests.get("https://jsonplaceholder.typicode.com/todos/1")
    return response.json()

if __name__ == "__main__":
    print(fetch_data())

4️⃣ 运行代码

poetry run python poetry_example/__init__.py

🔹 构建和发布 Python 包

构建项目

poetry build

发布到 PyPI

poetry publish --repository pypi

🔹 总结

  • Poetry 让 Python 依赖管理更简单、更高效
  • 自动创建和管理虚拟环境
  • 更好的包管理和版本控制
  • 一键发布 Python 包

如果你希望在 Python 项目 中管理依赖,Poetry 绝对是一个值得尝试的工具!🚀

你想将 Poetry 集成到现有项目中吗?有什么具体需求,我可以帮你优化!


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。