让UV管理一切!!!

一、遇到的问题

自己在做AI开发的时候,先用的conda来管理虚拟环境,然后使用pip freeze > reqiurments来打包相关依赖。

优点,conda环境可以让不同的项目有单独的虚拟环境,不会干扰每个项目,还可以多个项目共享一个conda环境。

缺点:

1.项目一旦大的话,python最麻烦的就是环境依赖,本来自己安装的核心依赖就30个,但是每个库又依赖别的子库,这样下来就有几百上千个依赖,非常麻烦。

2.如果只删除主依赖,比如fastapi。但是它的其他子依赖不会被删除。

3. 别人使用你的项目,不知道你的python版本号,你自己也可能会忘记,需要写在README.MD中记录。

二、UV和pyproject.toml介绍

​UV​ 是由 Astral 团队(Ruff 工具开发者)用 Rust 编写的新一代 Python 包管理器,旨在替代传统工具链(如 pip、virtualenv、poetry 等),提供以下核心优势:

​极速性能​:依赖解析与安装速度比 pip 快 10-100 倍,尤其在大型项目中优势显著。
​一体化功能​:集成虚拟环境管理、依赖锁定、Python 版本控制、脚本执行等。
​兼容性​:支持 pyproject.toml 和 requirements.txt,无缝迁移现有项目。
​跨平台​:支持 Windows、macOS 和 Linux。

​维度​

​UV + pyproject.toml

​Conda​

​pip freeze​

​性能​

⚡ 极快(Rust 并行处理)

⏱️ 较慢

⏱️ 慢(依赖解析无优化)

​依赖管理​

✅ 结构化分组 + 语义化版本

⚠️ 混合来源易冲突

❌ 扁平化、无分组

​环境隔离​

✅ 轻量(.venv目录)

✅ 强隔离但体积大

✅ 需配合 venv

​适用场景​

Web 服务、微服务、CI/CD

数据科学、AI(非 Python 依赖)

旧项目维护

​标准化​

✅ PEP 621 官方标准

❌ 私有标准

❌ 非结构化文件

 

三、安装UV和配置环境路径

 3.1 安装uv

按 Win + X→ 选择 ​​“Windows PowerShell(管理员)

# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

如果你安装的时候像我一样,输入 irm https://astral.sh/uv/install.ps1 | iex 命令后,窗口就自动关闭了。

可以试试

方法 1:临时修改执行策略(推荐)​

在 ​​当前 PowerShell 会话​​ 中运行以下命令,允许运行本地脚本(关闭窗口后失效):

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

​执行后重试安装命令​​:

irm https://astral.sh/uv/install.ps1 | iex

3.2 设置环境变量

  1. ​打开环境变量设置​

    • Win + R 输入 sysdm.cpl→ 高级 → 环境变量

  2. ​修改用户变量​

    • 在"用户变量"区域选择Path→ 编辑 → 新建

    • 添加路径:C:\Users\GDZD-BG-202115\.local\bin (根据自己的路径)

重启powershell就可以了验证是否安装成功了

uv --version

 

四、 使用UV管理Python项目​

常用命令速查表

​功能​

​命令​

创建虚拟环境

uv venv

添加依赖

uv add <包名>

同步依赖

uv sync

依赖树查看

uv tree

运行脚本

uv run <脚本名>

更新所有依赖

uv sync --upgrade

导出依赖列表

uv pip freeze > requirements.txt

注意:使用的IDE一定要全部关闭,重启一下VSCODE,这样才可以加载到你的全局环境变量。如果你开了多个VSCODE,只是关闭一个其中一个VSCODE,就一直加载不到设置好的全局变量。

而且VSCODE中需要设置默认终端是POWERSHELL

4.1 安装python版本

打印python支持的所有版本

uv python list

 安装特定的支持的python版本比如(3.10)

uv python install cpython-3.10.18-windows-x86_64-none

 

使用 已经下载的python版本运行一个py文件

uv run -p 3.10 hello.py

uv run -p cpython-3.10.0b3 hello.py # 写全也可以

 

使用python交互界面

uv run -p cpython-3.10.0b3 python

 

4.2 进入项目初始化项目

在 VS Code 中新建项目目录,通过终端执行

uv init -p 3.10

  • ​生成文件​​:

    • pyproject.toml:记录项目元数据(名称、Python 版本、依赖)

    • .python-version:指定项目默认 Python 版本

    • README.md和 .gitignore(基础模板)

比如代码main.py

from fastapi import FastAPI

import uvicorn

app = FastAPI()  # 创建 FastAPI 实例

# 定义根路由,返回 JSON 响应

@app.get("/")

async def hello_world():

    return {"message": "Hello World"}

# 可选:添加带路径参数的端点

@app.get("/hello/{name}")

async def greet(name: str):

    return {"message": f"Hello {name}"}

if __name__ == '__main__':

    #  http://localhost:8001/hello/Alice

    uvicorn.run(app, host="127.0.0.1", port=8001)

直接添加这个包,然后uv会自动创建一个虚拟环境 

uv add  fastapi

 

会发现主依赖还有很多其他依赖。

在vscode右下角,选择虚拟环境。(如果找不到python版本号,就重启vscode就行)

 

4.3 导入和项目无关的包

加上 --dev参数,就会避免和主要成包混淆

uv add ruff --dev

移除依赖,比如移除ruff

uv remove ruff --dev 

把ruff当做一个tool下载到系统中

uv tool install ruff 

 

这样子ruff这个包不在到pyproject.toml中,是一个单独的进程自己运行

uv tool install 是系统的,每一个项目都可以用

4.4 打包成运行脚本,让别人可以直接使用

在pyproject.toml文件中加上

[project.scripts]

脚本名称 = "py文件:文件中的函数名"

[project.scripts]

hb_test = "main:func"

main.py是这样的

def func(query: str):

    return {"query": query}

if __name__ == "__main__":

    func()

使用下面命令打包成一个whl文件可以让别人下载,主要,项目架构只能有一个main.py不能有别的py文件并列

uv build

 

dist\helloworld-0.1.0-py3-none-any.whl

使用uv tool install 或uv add 方法来安装自己发布的包

uv tool install dist\helloworld-0.1.0-py3-none-any.whl

uv add dist\helloworld-0.1.0-py3-none-any.whl 

查看已经安装的工具

uv tool list 

 

使用自己的工具

# 使用刚刚写的,脚本工具名再给对应参数直接运行,

 hb_test

# 或者这样运行

uv tool run helloworld

这个卡住了,不知道为什么。。。用不了工具

卸载工具

uv tool uninstall 工具名

uv tool uninstall helloword 

查看包的依赖关系

uv pip tree

 

其他

虚拟环境和包

手动管理环境和包
创建虚拟环境(替换 venv 和 virtualenv):

uv venv: 创建一个新的虚拟环境。

在环境中管理软件包(替换 pip 和 pipdeptree):

uv pip install: 将包安装到当前环境。

uv pip show: 显示已安装包的详细信息。

uv pip freeze: 列出已安装的包及其版本。

uv pip check: 检查当前环境中的包是否兼容。

uv pip list: 列出已安装的包。

uv pip uninstall: 卸载包。

uv pip tree: 查看环境的依赖树。

在环境中锁定包(替换 pip-tools):

uv pip compile: 将依赖项编译到锁文件中。

uv pip sync: 使用锁文件同步环境。

​对比维度​

uv add

uv pip install

​主要用途​

项目依赖管理(记录+锁定)

临时安装包(不修改项目配置)

​依赖记录​

写入 pyproject.toml

❌ 不修改任何配置文件

​依赖锁定​

✅ 更新 uv.lock文件

❌ 不生成/更新锁定文件

​环境隔离​

默认安装到项目虚拟环境

依赖当前激活环境(可能污染全局)

​项目一致性​

✅ 确保团队/环境依赖一致

❌ 无法保证版本一致性

​适用场景​

正式项目开发、协作环境

临时工具安装、调试

五、 参考文章

uv的出现能淘汰多少python工具…… 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916015.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916015.shtml

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

相关文章

Jmeter使用 - 2

5 参数化 5.1 自定义变量 线程组 --> 配置元件 --> 用户定义的变量 可以自定义变量&#xff0c;通过 ${变量名} 使用 5.2 随机函数 随机数函数 # 生产六位数的随机数字 ${__Random(100000,999999,)} # 生成随机时间: 时间格式yyyy-MM-dd,开始时间,结束时间,设置时区…

部署 Zabbix 企业级分布式监控

目录 一、监控系统的功能概述 1、监控的定义 2、监控的五个层次 &#xff08;1&#xff09;基础设施监控 &#xff08;2&#xff09;系统层监控 &#xff08;3&#xff09;应用层监控 &#xff08;4&#xff09;业务监控 &#xff08;5&#xff09;端用户体验监控 二、…

Silly Tavern 教程②:首次启动与基础设置

本文介绍 Silly Tavern 首次启动后的基础设置&#xff0c;包括语言切换与 AI 后端连接&#xff0c;重点推荐 无需付费即可使用的免费或低成本方案&#xff0c;涵盖 Groq、AI Horde、Gemini 和 OpenRouter。 一、启动 Silly Tavern 并访问界面 完成安装后&#xff0c;执行以下命…

C#解析JSON数据全攻略

还在为C#处理网络API返回的复杂JSON数据头疼吗&#xff1f;据统计&#xff0c;90%的开发者都曾在JSON解析上栽过跟头&#xff01; 本文将手把手教你用C#轻松玩转JSON数据&#xff1a;- HttpClient获取网络JSON数据- System.Text.Json动态解析技巧- 强类型模型转换实战- 特殊字…

8-大语言模型—指令理解:基于 LoRA 的大语言模型指令微调框架

目录 1、模型上下文窗口 1.1、增加上下文窗口的微调&#xff08;Fine-tuning for Longer Context&#xff09; 1.1.1、 核心目标 1.1.2、关键步骤 &#xff08;1&#xff09;数据准备&#xff1a;构建长文本训练集 &#xff08;2&#xff09;微调策略&#xff1a;分阶段适…

工业数据中台:PLC、SCADA、MES 的实时协同架构

在智能制造升级过程中&#xff0c;工业数据的互联互通是突破生产效率瓶颈的关键。PLC&#xff08;可编程逻辑控制器&#xff09;掌控着设备的实时运行参数&#xff0c;SCADA&#xff08;监控与数据采集系统&#xff09;负责车间级的状态监控&#xff0c;MES&#xff08;制造执行…

【Golang】Go语言基础语法

Go语言基础语法 文章目录Go语言基础语法一、Go标记二、行分隔符三、注释四、标识符五、字符串连接六、关键字七、Go语言的空格八、格式化字符串一、Go标记 Go程序可以由多个标记组成吗&#xff0c;可以是关键字、标识符、常量、字符串、符号。如下Go语句由6个标记组成&#xf…

WebRTC指纹——深度分析(中篇)

1. 引言 在上篇中,我们建立了WebRTC审查规避系统分析的理论基础,探讨了技术背景和威胁模型。中篇将深入分析WebRTC协议栈中的具体识别特征,通过对多个主流WebRTC应用的实际协议分析,揭示不同实现之间存在的显著差异。 这些协议层面的特征差异构成了审查系统进行指纹识别的…

谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】

1 k8s 1.1 简介 Kubernetes 简称 k8s。 是用于自动部署&#xff0c; 扩展和管理容器化应用程序的开源系统。 中文官网&#xff1a; https://kubernetes.io/zh/ 中文社区&#xff1a; https://www.kubernetes.org.cn/ 官方文档&#xff1a; https://kubernetes.io/zh/docs/h…

从零搭建 OpenCV 项目(新手向)-- 第二天 OpenCV图像预处理(一)

目录 一、图像翻转&#xff08;镜像翻转&#xff09; 1. 定义 2. OpenCV 函数 3. 数学表达 二、图像仿射变换 1. 定义 2. 仿射变换的基本原理 3. OpenCV 函数 4. 图像旋转 5. 图像平移 6. 图像缩放 7. 图像剪切 8. 为什么会出现黑色背景&#xff1f; 三、图像色彩…

贪心算法Day6学习心得

第一道&#xff1a;738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 这道题目暴力算法肯定是最容易想到的&#xff0c;先附上暴力的代码&#xff1a; class Solution { private:// 判断一个数字的各位上是否是递增bool checkNum(int num) {int max 10;while (n…

数据的评估与清洗篇---上手清理索引和列名

重命名索引和列名 在读取数据时,如果我们发现数据的索引或者列名乱七八糟的,可以使用DataFrame的rename方法对它们进行重新命名。 df1.rename(index={...})df1.rename(columns={...}) 重命名索引 如果想改索引就把可选参数index指定为一个字典,针对索引,把要修改…

【ICML2025】时间序列|TimePro:炸裂!线性复杂度实现高效长程多元时间序列预测!

论文地址&#xff1a;https://arxiv.org/pdf/2505.20774 代码地址&#xff1a;https://github.com/xwmaxwma/TimePro 为了更好地理解时间序列模型的理论与实现&#xff0c;推荐参考UP “ThePPP时间序列” 的教学视频。该系列内容系统介绍了时间序列相关知识&#xff0c;并提供配…

2025真实面试试题分析-iOS客户端开发

以下是对iOS客户端开发工程师面试问题的分类整理、领域占比分析及高频问题精选&#xff08;基于​​85道问题&#xff0c;总出现次数118次​​&#xff09;。按技术领域整合为​​7大核心类别​​&#xff0c;按占比排序并精选高频问题标注优先级&#xff08;1-5&#x1f31f;&…

计算机网络简答题(大雪圣期末参考资料)

1、网络性能指标/计算机网络有哪些常用的性能指标&#xff1f;答&#xff1a;速率&#xff0c;带宽&#xff0c;吞吐量&#xff0c;时延&#xff08;发送时延、传播时延、处理时延、排队时延&#xff09;&#xff0c;时延带宽积&#xff0c;往返时间RTT和信道&#xff08;或网络…

红宝书单词学习笔记 list 76-100

list 76NO.WordMeaning1staleadj. 不新鲜的&#xff1b;陈腐的2stalln. 小隔间&#xff1b;摊位&#xff1b;牲畜棚&#xff1b;v. 停顿&#xff1b;(使) 熄火&#xff1b;故意拖延3staplen. 订书钉&#xff1b;主要产品&#xff1b;主要部分&#xff1b;主食&#xff1b;v. 用…

Vue3 学习教程,从入门到精通,Vue 3 计算属性(Computed Properties)知识点详解与案例代码(15)

Vue 3 计算属性&#xff08;Computed Properties&#xff09;知识点详解与案例代码 在 Vue 3 中&#xff0c;计算属性&#xff08;Computed Properties&#xff09; 是用于基于响应式数据派生新数据的一种方式。计算属性具有以下特点&#xff1a; 缓存性&#xff1a;只有在依赖…

2.5 PN-PTCP

Profinet Precision Transparent Clock Protocol (PN-PTCP) PN-PTCP&#xff08;精确透明时钟协议&#xff09;是一种专用于 Profinet 的 二层协议&#xff0c;其作用是为网络中的设备提供高精度的时间同步。用于实现网络设备的高精度时间同步。

WordPress与Typecho站点CloudFlare缓存优化实战指南

文章目录 WordPress与Typecho站点CloudFlare缓存加速全攻略 引言 一、CloudFlare缓存基础原理 1.1 CloudFlare工作流程 1.2 缓存类型 二、基础配置指南 2.1 CloudFlare账户设置 2.2 缓存配置 2.3 页面规则设置 三、高级缓存策略 3.1 动态内容缓存 WordPress方案: Typecho方案:…

【OpenCV实现多图像拼接】

文章目录1 OpenCV 图像拼接核心原理2 OpenCV 图像拼接实现代码方法一&#xff1a;使用 OpenCV 内置 Stitcher 类&#xff08;推荐&#xff09;方法二&#xff1a;手动实现核心步骤关键参数说明3 常见问题处理4 增量式图像拼接&#xff08;Incremental Image Stitching&#xff…