让UV管理一切!!!

一、遇到的问题

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

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

缺点:

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

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

  1. 别人使用你的项目,不知道你的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工具......

相关推荐
a1504634 分钟前
人工智能——图像梯度处理、边缘检测、绘制图像轮廓、凸包特征检测
人工智能·深度学习·计算机视觉
荼蘼10 分钟前
基于 KNN 算法的手写数字识别项目实践
人工智能·算法·机器学习
wei_shuo21 分钟前
亚马逊云科技 EC2 部署 Dify,集成 Amazon Bedrock 构建生成式 AI 应用
人工智能·amazon·amazon bedrock
ppo9226 分钟前
MCP简单应用:使用SpringAI + Cline + DeepSeek实现AI创建文件并写入内容
人工智能·后端
kura_tsuki26 分钟前
[Linux入门] Linux 远程访问及控制全解析:从入门到实战
linux·服务器·安全
lunz_fly199227 分钟前
统信 UOS 安装 svn 指南
linux
云卓SKYDROID36 分钟前
无人机速度模块技术要点分析
人工智能·无人机·科普·高科技·云卓科技
Antonio91539 分钟前
【Redis】Linux 配置Redis
linux·数据库·redis
Rover.x1 小时前
内存泄漏问题排查
java·linux·服务器·缓存
禁默1 小时前
进程调度的艺术:从概念本质到 Linux 内核实现
linux·运维·服务器