从 requirements.txt 迁移到 Poetry:现代 Python 项目依赖管理之路

784 阅读2分钟

在 Python 项目开发中,依赖管理一直是一个重要话题。最近,我将个人项目 Terminal-LLM 从传统的 requirements.txt 迁移到了更现代的 Poetry 解决方案。这篇文章将分享迁移经验,并介绍这个正在开发中的项目。

Terminal-LLM 项目介绍

Terminal-LLM 是一个优雅的终端型 LLM 客户端,旨在为开发者提供一个简单而强大的命令行 AI 助手工具。项目目前正处于积极开发阶段,主要特点包括:

  • 🚀 简洁的命令行界面
  • 🔗 支持多种 LLM 模型接入
  • 💬 自然的对话交互体验
  • 🛠 强大的开发辅助功能

为什么选择 Poetry?

在项目早期,我使用传统的 requirements.txt 管理依赖。随着项目发展,我遇到了以下挑战:

  1. 版本锁定requirements.txt 需要手动维护确切版本号
  2. 环境隔离:虚拟环境管理不够优雅
  3. 依赖解析:无法自动处理依赖冲突
  4. 开发依赖:难以区分运行时和开发时依赖

Poetry 提供了这些问题的完整解决方案:

  • 使用 pyproject.toml 声明式配置
  • 自动生成 poetry.lock 锁定依赖版本
  • 内置虚拟环境管理
  • 支持区分开发依赖
  • 更好的依赖解析器

迁移过程

1. 安装 Poetry

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

2. 初始化项目

poetry init

这个命令会引导我创建 pyproject.toml 文件,包含项目元数据和依赖信息。

3. 配置项目信息

[tool.poetry]
name = "terminal-llm"
version = "0.1.0"
description = "An elegant terminal-based LLM client"
authors = ["Yiyabo! <wxxpublic@outlook.com>"]
readme = "README.md"
packages = [{include = "src"}]

4. 迁移依赖

将原有的 requirements.txt 中的依赖转换为 Poetry 格式:

[tool.poetry.dependencies]
python = "^3.8"
aiohttp = "^3.8.0"
python-dotenv = "^1.0.0"
rich = "^13.0.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
pytest-asyncio = "^0.21.0"

5. 安装依赖

poetry install

迁移后的优势

  1. 更清晰的依赖管理

    • 依赖关系一目了然
    • 版本约束更灵活
    • 自动处理依赖冲突
  2. 更好的开发体验

    • 虚拟环境自动管理
    • 依赖安装更快速
    • 构建和发布更便捷
  3. 更规范的项目结构

    • 符合现代 Python 项目标准
    • 便于团队协作
    • 更容易维护

Terminal-LLM 项目展望

目前,Terminal-LLM 正在积极开发中,计划添加更多特性:

  • 支持更多 LLM 模型
  • 增强的代码补全功能
  • 更智能的上下文管理
  • 插件系统支持

我欢迎社区贡献,无论是提交 PR、报告问题还是提供建议,都将帮助项目变得更好。

结论

迁移到 Poetry 是现代 Python 项目的明智选择。它不仅简化了依赖管理,还提供了更好的开发体验。对于 Terminal-LLM 这样的开源项目来说,这是提升项目质量和可维护性的重要一步。

如果您对 Terminal-LLM 项目感兴趣,欢迎访问我的 GitHub 仓库,一起参与开发!