当前位置: 首页 > news >正文

python新工具-uv包管理工具

uv 是一个由 Astral (Ruff 的创建者) 开发的极速 Python 包和项目管理器,用 Rust 编写。它旨在作为传统 Python 包管理工具(如 pippip-toolspipxpoetrypyenvtwinevirtualenv 等)的替代品,通过其高性能和多功能集成,解决 Python 生态系统中常见的痛点,例如安装速度慢、依赖冲突和环境管理复杂性。
在这里插入图片描述

1. uv 工具的基本介绍、背景和主要功能

uv 的核心目标是提供一个统一、高效的解决方案,以简化 Python 项目的开发工作流。

背景:
Python 的包管理生态系统长期以来存在一些挑战,包括安装速度慢、依赖解析效率低以及工具链碎片化(需要使用多个工具来完成不同的任务)。uv 的出现旨在通过 Rust 的性能优势和一体化设计,克服这些问题,提供一个更快速、更可靠、更易用的开发体验。

主要功能:

  • 极速性能:比 pip 快 10-100 倍,尤其在处理大型项目和复杂依赖时表现出色。
  • 一体化解决方案:集成了 pippip-toolspipxpoetrypyenvtwinevirtualenv 等多种工具的功能,简化了工作流。
  • 全面的项目管理:提供统一的锁文件 (uv.lock),确保环境的可复现性。
  • 虚拟环境管理:内置虚拟环境创建和管理功能,无需单独使用 virtualenvvenv
  • Python 版本管理:支持安装和管理多个 Python 版本。
  • 脚本执行:能够运行带有内联依赖元数据的脚本。
  • 命令行工具管理:可以运行和安装作为 Python 包发布的命令行工具(类似于 pipx)。
  • 兼容 pip 接口:提供 pip 兼容接口,方便现有项目平滑迁移。
  • 磁盘空间效率:通过全局缓存实现依赖去重,节省磁盘空间。
  • 跨平台支持:支持 macOS、Linux 和 Windows 操作系统。
  • 无需 Rust 或 Python 即可安装:可以通过 curlpip 轻松安装。

2. uv 工具的安装方法和基本使用流程

uv 的安装非常便捷,并且提供了多种方式。

安装方法:

  1. 独立安装程序 (推荐)
    • macOS 和 Linux:
      curl -LsSf https://astral.sh/uv/install.sh | sh
      # 或者指定版本
      curl -LsSf https://astral.sh/uv/install.sh | sh -s -- --version 0.6.12
      
    • Windows (PowerShell):
      powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
      
  2. 通过 pipx 安装
    pipx install uv
    
    (需要先安装 pipx
  3. 通过 pip 安装
    pip install uv
    
    (不推荐全局安装,可能导致系统 Python 环境混乱)

更新 uv

  • 如果通过独立安装程序安装:
    uv self update
    
  • 如果通过 pipx 安装:
    pipx upgrade uv
    

基本使用流程:

  1. 验证安装

    uv --version
    

    应显示 uv 的版本信息。

  2. 创建虚拟环境
    uv 可以自动管理虚拟环境。你也可以手动创建:

    uv venv
    # 或指定 Python 版本
    uv venv --python 3.12.0
    

    这会在当前目录下创建一个名为 .venv 的虚拟环境。

  3. 激活虚拟环境

    source .venv/bin/activate  # macOS/Linux
    .venv\Scripts\activate     # Windows
    
  4. 安装依赖

    • 安装单个包:
      uv add requests
      
    • 安装 requirements.txt 中的依赖:
      uv pip install -r requirements.txt
      
    • 同步锁文件中的依赖:
      uv pip sync docs/requirements.txt
      
  5. 运行脚本或命令
    uv run 会自动锁定和同步项目依赖,然后执行命令。

    uv run python your_script.py
    

3. uv 工具的使用示例和最佳实践

uv 提供了丰富的功能来管理 Python 项目的生命周期。

项目初始化与依赖管理:

  • 初始化新项目

    uv init my_project
    cd my_project
    

    这会创建一个包含 .git/.gitignore.python-versionREADME.mdmain.pypyproject.toml 的项目结构。

  • 添加依赖

    uv add requests pandas
    

    这会将 requestspandas 添加到 pyproject.toml[project].dependencies 中,并自动更新 uv.lock 文件。

  • 添加开发依赖

    uv add ruff --dev
    

    这会将 ruff 添加到 pyproject.toml[project].optional-dependencies[tool.uv.dependency-groups] 中。

  • 移除依赖

    uv remove requests
    
  • 锁文件 (uv.lock)
    uv 会自动生成和管理 uv.lock 文件,其中包含所有依赖的精确版本。最佳实践是将其提交到版本控制中,以确保团队成员和部署环境之间的一致性。

  • 编译 requirements.txt
    如果你需要生成 pip 兼容的 requirements.txt 文件:

    uv pip compile docs/requirements.in --universal --output-file docs/requirements.txt
    

命令行工具管理:

  • 临时运行工具 (uvx)
    uvxuv tool run 的别名,它会在一个临时的、隔离的环境中运行工具,而无需全局安装。

    uvx pycowsay 'hello from uv'
    uvx ruff check
    

    这对于不经常使用的工具或避免全局环境污染非常有用。

  • 全局安装工具

    uv tool install ruff
    

    安装后,工具的可执行文件会添加到 PATH 中,可以直接调用。

  • 升级已安装工具

    uv tool upgrade ruff
    

脚本执行:

  • 运行带有内联元数据的脚本
    uv 可以读取脚本文件中的内联元数据来安装和运行其依赖。
    echo 'import requests; print(requests.get("https://www.example.com"))' > example.py
    uv add --script example.py requests
    uv run example.py
    

构建和发布包:

  • 构建分发包

    uv build
    

    这会生成源代码分发包 (.tar.gz) 和轮子文件 (.whl)。

  • 发布包到 PyPI

    uv publish
    

    (通常需要配置 PyPI 凭据,例如通过 ~/.pypirc 文件或环境变量)

CI/CD 集成:

uv 提供了与持续集成/持续部署 (CI/CD) 流程的良好集成。

  • GitHub Actions
    推荐使用官方的 astral-sh/setup-uv Action 来安装 uv 并配置缓存。

    name: Example
    jobs:uv-example:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- name: Install uvuses: astral-sh/setup-uv@v5with:version: 0.6.12 # 固定 uv 版本
    
  • GitLab CI/CD
    Astral 提供了预装 uv 的 Docker 镜像,可以直接在 .gitlab-ci.yml 中使用。

    variables:UV_VERSION: "0.5"PYTHON_VERSION: "3.12"BASE_LAYER: bookworm-slim
    uv:image: ghcr.io/astral-sh/uv:$UV_VERSION-python$PYTHON_VERSION-$BASE_LAYER
    

uv 与其他工具的比较:

下表总结了 uvpipvirtualenvCondaPoetry 的主要区别:

特性uvPIP + virtualenvCondaPoetry
实现语言RustPythonPythonPython
速度pip 快 10-100 倍基准pippip
内存使用非常高效较高中等
环境管理内置需要单独工具内置内置
依赖解析快速,现代化解析器基本全面现代化解析器
非 Python 包
锁文件是 (uv.lock)否 (基本 requirements.txt)
项目结构
包发布是 (配合 twine)
兼容性与现有 pip 生态系统兼容标准 Python 工具独立生态系统更具主观性
错误处理清晰的错误信息基本良好良好
资源占用极小中等中等
科学计算重点
跨平台一致性良好有限优秀良好
http://www.lryc.cn/news/626159.html

相关文章:

  • RPC高频问题与底层原理剖析
  • Chrome插件开发【windows】
  • 【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
  • LLM(大语言模型)的工作原理 图文讲解
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • 大模型+RPA:如何用AI实现企业流程自动化的“降本增效”?
  • 基于SpringBoot+Vue的养老院管理系统的设计与实现 智能养老系统 养老架构管理 养老小程序
  • Linux系统部署python程序
  • SConscript 脚本入门教程
  • InfoNES模拟器HarmonyOS移植指南
  • Redis缓存加速测试数据交互:从前缀键清理到前沿性能革命
  • 图形化监控用数据动态刷新方法
  • Transformer入门到精通(附高清文档)
  • 内网后渗透攻击--隐藏通信隧道技术(压缩、上传,下载)
  • 常见的软件图片缩放,算法如何选择?
  • 【开源工具】基于社会工程学的智能密码字典生成器开发(附完整源码)
  • 字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent
  • 洛谷 P2834 纸币问题 3-普及-
  • Flink原理与实践 · 第三章总结
  • 第5.6节:awk字符串运算
  • 【驱动】RK3576:桌面操作系统基本概念
  • L2TP虚拟局域网
  • 快速傅里叶变换:数字信号处理的基石算法
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • 数据库-MYSQL配置下载
  • go链路追踪
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 不同语言的并发模型对比:Go、Java与Python
  • Go高效复用对象:sync.Pool详解
  • 机器学习中的「损失函数」:模型优化的核心标尺