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.pswp.cn/pingmian/93817.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关spring-ai的defaultSystem与systemMessage优先级

今天在写项目的时候想用nacos随时修改system的prompt,突然发现defaultSystem的优先级比systemMessage高很多,废话我就不说了,看图吧。你觉得证据不够?那这样呢?

#运维 | 前端 # Linux http.server 实践:隐藏长文件名,简短路径 (http://IP:port/别名 ) 访问

如何运行页面为 http://ip:port/名称 1. 准备文件目录 假设文件原始位置: /home/ubuntu/projects/yinran/ckd.html将它移动到子目录并改名为 index.html: mkdir -p /home/ubuntu/projects/yinran/ckd mv /home/ubuntu/projects/yinran/ckd.html \/home/u…

任务管理器不刷新

记录一个小问题: 进入任务管理器之后发现页面不会刷新,性能界面也是一致。解决办法:查看–>更新速度–>正常

2025-08-21 Python进阶9——__main__与lambda

文章目录1 \_\_main\_\_1.1 name 变量1.1.1 当模块作为主程序直接运行时1.1.2 当模块被其他模块导入时1.2 \_\_main\_\_ 的含义1.3 if \_\_name\_\_ \_\_main\_\_1.5 小结2 lambda表达式2.1 基本概念2.2 lambda 函数语法2.3 使用示例2.4 与高阶函数结合使用2.4.1 与 map () 结…

Java:将视频上传到腾讯云并通过腾讯云点播播放

功能需求:传入一个videoFile也就是视频字节流,返回腾讯云点播的视频保存url需要在腾讯云中寻找的配置信息:导入的依赖:<!--腾讯云点播--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId&…

Unity3D物理游戏网络同步指南

前言 Unity3D 物理游戏的网络同步是一个复杂但非常核心的话题。要实现一个流畅、公平且可扩展的多人物理游戏&#xff0c;需要深入的理解和精心的设计。 下面我将为你全面解析 Unity3D 物理游戏的网络同步&#xff0c;包括核心概念、主流方案、实现细节以及最佳实践。 对惹&…

Amazon Redshift 访问配置完整指南

概述 Amazon Redshift 是 AWS 提供的云端数据仓库服务,支持多种访问方式。本文将详细介绍如何配置 IAM 权限、使用 AWS 控制台 Query Editor v2,以及通过 SQL Workbench/J 等第三方工具连接 Redshift 集群。 目录 环境准备 IAM 权限配置 Redshift 用户管理 AWS 控制台访问 …

electron-vite_19配置环境变量

前端配罟环境变量主要通过项目根目录下的.env系列文件实现&#xff0c;不同框架(如Vue、React)或构建工具(如Vite、Webpack)的具体操作略有差异&#xff0c;但核心逻辑均为通过环境变量文件区分开发、测试、生产等环境。方案1: 直接在根目录新建.env文件 1.在根目录新建 .env.d…

【python】arange用法

1. NumPy 里的 np.arangeimport numpy as np# 语法 np.arange([start, ]stop, [step, ], dtypeNone)参数说明&#xff1a;start&#xff1a;起始值&#xff08;默认 0&#xff09;stop&#xff1a;终止值&#xff08;不包含这个值&#xff09;step&#xff1a;步长&#xff08;…

力扣1005:k次取反后最大化的数组和

力扣1005:k次取反后最大化的数组和题目思路代码题目 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&…

国产数据库管理工具 CloudDM 2.7.1.0 发布,OceanBase 等数据源支持复杂 SQL 脱敏数据

CloudDM 是 ClouGence 公司推出的面向团队使用的数据库管理工具&#xff0c;支持云上、云下、多云等多种环境&#xff0c;并且提供多达 23 种数据源的支持。CloudDM 还支持数据库 DevOps CI/CD 功能&#xff0c;将用户产品发布流程中数据库发布和程序发布无缝串联起来。 更新亮…

AI大模型实战:用自然语言处理技术高效处理日常琐事

引言在数字化时代&#xff0c;我们每天都会面对大量的琐碎事务&#xff1a;整理会议记录、处理名单数据、撰写学习笔记等等。这些工作不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;的…

【spring security】为什么要使用userdetailservice

Spring Security UserDetailsService 深度解析&#xff1a;从401到认证成功的完整实现 &#x1f4cb; 目录 问题背景Spring Security认证架构UserDetailsService的作用完整实现过程常见问题与解决方案最佳实践 &#x1f3af; 问题背景 在开发B2B采购平台时&#xff0c;我们…

机器学习中的数据处理技巧

一、Pandas处理丢失数据&#xff08;一&#xff09;判断缺失值​​isnull()函数​​&#xff1a;用于判断数据框&#xff08;DataFrame&#xff09;中各个单元格是否为空&#xff0c;可帮助我们识别出存在缺失数据的单元格位置。&#xff08;二&#xff09;处理缺失值的方法​​…

田野科技“一张皮”,“AI+虚拟仿真”推动考古教学创新发展

文运同国运相牵&#xff0c;文脉同国脉相连。考古不仅关系到我们对古代文化的认知、发掘、保护、利用&#xff0c;关系到考古学学科体系、学术体系、话语体系的建设&#xff0c;更是关系到我国考古学的国际影响力&#xff0c;对增强世界不同地区古代文明的比较研究有着十分重要…

为什么我的UI界面会突然卡顿,失去响应

有操作都应是“非阻塞”的&#xff0c;以确保能随时响应用户的输入。导致主线程阻塞的常见“元凶”主要涵盖五个方面&#xff1a;主线程被“长时间”的同步计算所“阻塞”、单次渲染的界面节点过多或过于复杂、内存中存在“未释放”的巨大对象或“内存泄漏”、响应了“高频率”…

大规模IP轮换对网站的影响(服务器压力、风控)

在当下的互联网环境中&#xff0c;代理IP轮换已经成为爬虫、SEO、数据采集等行业的常见手段。尤其是大规模数据抓取时&#xff0c;通过代理池实现IP轮换&#xff0c;可以有效避免因单一IP请求过于频繁而被目标网站封禁。 然而&#xff0c;大规模IP轮换虽然对采集方有利&#xf…

4. STM32 vscode 环境, 官方插件

文章目录1. 新建配置2. 安装插件3. 新建工程1. 新建配置 新建vscode 配置&#xff0c; 因为stm32插件比较多&#xff0c; 避免和其他插件冲突。 激活环境&#xff1a; 这里可快速切换&#xff1a; 2. 安装插件 可选择安装最新预览版&#xff1a; 等待依赖安装完成后重启…

【动态规划:路径问题】最小路径和 地下城游戏

最小路径和&#xff08;medium&#xff09; 64. 最小路径和 ​ 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 ​ **说明&#xff1a;**每次只能向下或者向右移动一步。 示例 1&#xff…

SQL详细语法教程(七)核心优化

以下对 SQL 优化 涉及的关键场景&#xff08;含 update 行锁优化&#xff09;进行极致详细的拆解&#xff0c;从底层原理、执行流程到实战代码、避坑指南全维度覆盖&#xff0c;搭配表格对比让逻辑更清晰&#xff1a;一、SQL 优化 - COUNT 优化1. 底层原理&#xff1a;COUNT() …