migrate-pip-to-uv

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Migrate pip/pip-tools Monorepo to uv

将pip/pip-tools单体仓库迁移至uv

A skill for automating the migration of a Python monorepo project from pip/pip-tools workflows (requirements files, pip-compile, etc) to uv's project workflow (pyproject.toml, uv.lock, universal resolution).
这是一项用于自动将Python单体仓库项目从pip/pip-tools工作流(requirements文件、pip-compile等)迁移至uv项目工作流(pyproject.toml、uv.lock、通用依赖解析)的技能。

Purpose

目的

  • Convert requirements files (requirements.in, requirements.txt, requirements-dev.in, requirements-dev.txt, etc) to pyproject.toml and uv.lock
  • Migrate development, docs, and platform-specific dependency groups
  • Ensure universal, locked dependencies for all platforms
  • Update project workflows to use uv commands and environments
  • 将requirements文件(requirements.in、requirements.txt、requirements-dev.in、requirements-dev.txt等)转换为pyproject.toml和uv.lock
  • 迁移开发、文档及特定平台的依赖组
  • 确保所有平台的依赖均为通用且已锁定版本
  • 更新项目工作流以使用uv命令和环境

Workflow Steps

工作流步骤

  1. Analyze Existing Requirements Files
    • Detect requirements.in, requirements.txt, requirements-dev.in, requirements-dev.txt, requirements-docs.in, requirements-docs.txt, etc
    • Identify platform-specific requirements files (e.g. requirements-win.txt, requirements-linux.txt)
  2. Initialize uv Project
    • Run
      uv init
      to create pyproject.toml if not present
  3. Import Base Dependencies
    • Run
      uv add -r requirements.in -c requirements.txt
      to preserve locked versions
  4. Import Development Dependencies
    • Run
      uv add --dev -r requirements-dev.in -c requirements-dev.txt
    • If requirements-dev.in includes
      -r requirements.in
      , strip those lines before import
  5. Import Docs/Other Groups
    • Run
      uv add -r requirements-docs.in -c requirements-docs.txt --group docs
      (repeat for other groups)
  6. Import Platform-Specific Constraints
    • For each platform file, use
      uv pip compile requirements.in -o requirements-<platform>.txt --python-platform <platform> --no-strip-markers
    • Add with
      uv add -r requirements.in -c requirements-win.txt -c requirements-linux.txt ...
  7. Import Dependency Sources
    • For local paths or git dependencies, ensure they are mapped in
      [tool.uv.sources]
      in pyproject.toml
  8. Sync and Lock
    • Run
      uv lock
      to generate uv.lock
    • Run
      uv sync
      to create .venv and sync environment
  9. Update Project Workflows
    • Replace pip/pip-tools commands with uv equivalents (e.g.
      uv run pytest
      )
    • Document new workflow in README.md
  1. 分析现有Requirements文件
    • 检测requirements.in、requirements.txt、requirements-dev.in、requirements-dev.txt、requirements-docs.in、requirements-docs.txt等文件
    • 识别特定平台的requirements文件(例如requirements-win.txt、requirements-linux.txt)
  2. 初始化uv项目
    • 若pyproject.toml不存在,运行
      uv init
      创建该文件
  3. 导入基础依赖
    • 运行
      uv add -r requirements.in -c requirements.txt
      以保留锁定版本
  4. 导入开发依赖
    • 运行
      uv add --dev -r requirements-dev.in -c requirements-dev.txt
    • 若requirements-dev.in包含
      -r requirements.in
      行,在导入前移除这些行
  5. 导入文档/其他组依赖
    • 运行
      uv add -r requirements-docs.in -c requirements-docs.txt --group docs
      (其他组重复此操作)
  6. 导入特定平台约束
    • 针对每个平台文件,使用
      uv pip compile requirements.in -o requirements-<platform>.txt --python-platform <platform> --no-strip-markers
    • 通过
      uv add -r requirements.in -c requirements-win.txt -c requirements-linux.txt ...
      添加约束
  7. 导入依赖源
    • 对于本地路径或Git依赖,确保在pyproject.toml的
      [tool.uv.sources]
      中进行映射
  8. 同步与锁定
    • 运行
      uv lock
      生成uv.lock文件
    • 运行
      uv sync
      创建.venv并同步环境
  9. 更新项目工作流
    • 将pip/pip-tools命令替换为对应的uv命令(例如
      uv run pytest
    • 在README.md中记录新的工作流

Example Usage

示例用法

plaintext
migrate-pip-to-uv
plaintext
migrate-pip-to-uv

Example Migration Commands

示例迁移命令

  • uv init
  • uv add -r requirements.in -c requirements.txt
  • uv add --dev -r requirements-dev.in -c requirements-dev.txt
  • uv add -r requirements-docs.in -c requirements-docs.txt --group docs
  • uv pip compile requirements.in -o requirements-win.txt --python-platform windows --no-strip-markers
  • uv add -r requirements.in -c requirements-win.txt -c requirements-linux.txt
  • uv lock
  • uv sync
  • uv run pytest
  • uv init
  • uv add -r requirements.in -c requirements.txt
  • uv add --dev -r requirements-dev.in -c requirements-dev.txt
  • uv add -r requirements-docs.in -c requirements-docs.txt --group docs
  • uv pip compile requirements.in -o requirements-win.txt --python-platform windows --no-strip-markers
  • uv add -r requirements.in -c requirements-win.txt -c requirements-linux.txt
  • uv lock
  • uv sync
  • uv run pytest

Best Practices

最佳实践

  • Use pyproject.toml for all dependency groups
  • Use uv.lock for universal, platform-agnostic locking
  • Prefer uv run for all commands in the environment
  • Document migration steps and new workflow for contributors
  • Remove obsolete requirements files after migration
  • 使用pyproject.toml管理所有依赖组
  • 使用uv.lock实现跨平台通用的依赖锁定
  • 优先使用uv run执行环境中的所有命令
  • 为贡献者记录迁移步骤及新工作流
  • 迁移完成后移除过时的requirements文件

References

参考资料