fastapi切换uv

最近考虑将公司现有的 pip 项目迁移到更现代的包管理工具,并且在 uv 和 Poetry 之间权衡。之前在django项目中使用过poetry,感觉也挺好用,查看他们官网文档做了一个对比

🧩 工具核心特性速览

特性维度 uv Poetry
核心优势 极致速度(比 pip 快 10-100 倍) 一体化体验(依赖管理 + 打包发布)
定位 极速的包管理器与项目环境管理工具 全功能的项目依赖管理与打包工具
锁文件 uv.lock poetry.lock
虚拟环境 自动创建和管理,无需手动激活 自动创建和管理
打包发布 不支持 内置支持
学习曲线 相对平缓,命令直观 中等,需要理解其项目结构和配置

💡 如何选择:从项目需求出发

表格展示了工具的核心差异,您的选择应基于项目的具体需求:

  • 选择 uv的理由:如果追求极致的依赖安装速度(特别是在 CI/CD 流水线中),希望工具轻量、快速上手,并且项目目前只需要管理依赖和环境,没有打包发布的需求。它的 uv run命令能自动处理环境,让您专注于编码。

  • 选择 Poetry的理由:如果您的项目未来需要打包成库或应用并发布到 PyPI 等平台,或者您非常看重依赖声明、打包发布在一个工具内完成的一体化体验

  • 结论:这样一对比,uv就更适合我当前的项目,我没有打包发布的需求,同时作为敏捷开发,代码变更频繁,对于CICD的执行速度有要求。

🚀 从 Pip 迁移到 uv 的简明步骤

如果您决定尝试 uv,迁移过程非常平滑,可以遵循以下步骤:

  1. 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

安装后,重新打开终端即可使用。

  1. 项目初始化:在您的项目根目录下执行:

    uv init
    

    这个命令会创建一个基本的 pyproject.toml文件,不会影响您的现有代码。

  2. 导入现有依赖:这是最关键的一步,将 requirements.txt中的依赖导入到新体系,--no-sync表示只加入project.toml的依赖中,如果不带则会一次性安装:

uv add -r requirements.txt --no-sync

此命令会读取 requirements.txt,将依赖项写入 pyproject.toml,并生成锁文件 uv.lock

  1. 同步环境:确保您的本地环境与锁文件一致,这里sync时可以按组分类,只安装部分数据:
uv sync           # 安装所有依赖(包括生产依赖和所有可选组)
uv sync --group dev  # 仅安装生产依赖和 dev 组的依赖
uv sync --no-dev     # 仅安装生产依赖,不安装任何可选组的依赖
  1. 验证迁移:使用 uv 运行您的项目,检查是否正常:

    uv run python your_main_script.py
    

完成迁移后,日常使用 uv add <package_name>来添加新依赖,使用 uv run来执行命令即可。
6.兼容pip:pip与uv是可以共存的,如果想要留一段时间去给团队适应,可以执行下面命令,根据uv的lock去生成依赖文件

uv pip compile pyproject.toml -o requirements.txt

清理缓存的具体操作

  • 清理所有缓存:执行以下命令可以清除 uv 的全部缓存数据 。

    uv cache clean
    
  • 清理特定包的缓存:如果你只想删除某个特定包(例如 numpy)的缓存,可以使用 remove 子命令 。

    uv cache remove <package_name>
    # 例如,清理 numpy 的缓存
    uv cache remove numpy
    

缓存的存储位置

uv 的缓存通常存储在系统的特定目录下,了解这些位置有助于你手动检查或必要时进行彻底清理 :

  • Linux/macOS$HOME/.cache/uv
  • Windows%LOCALAPPDATA%\uv\cache

缓存机制的优势

uv 的缓存机制是其速度快的重要原因之一。它会缓存下载的包和构建的 wheel 文件,避免重复的网络请求和编译工作,从而显著提升后续安装依赖的速度 。因此,通常只有在遇到安装问题或需要释放磁盘空间时,才需要进行缓存清理。

💎 总结与建议

简单来说,可以遵循这个决策思路:要速度快、够轻量,选 uv;要功能全、能打包,选 Poetry

uv与pip的执行速度提升

  • pip执行时间
 uvicorn-0.34.0 uvloop-0.22.1 watchfiles-1.1.1 websockets-15.0.1 yarl-1.22.0
[notice] A new release of pip available: 22.3.1 -> 25.3
[notice] To update, run: pip install --upgrade pip
pip install -r requirements.txt  50.47s user 3.25s system 32% cpu 2:45.49 total
  • uv执行时间
 + uvicorn==0.34.0
 + uvloop==0.22.1
 + watchfiles==1.1.1
 + websockets==15.0.1
 + yarl==1.22.0
uv sync  4.20s user 2.50s system 10% cpu 1:02.75 total
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容