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

Python uv的使用和配置

一、uv 简介

uv 是由 Astral 团队(Ruff 工具的开发者)基于 Rust 编写的高性能 Python 包管理工具,旨在替代 pipvirtualenv 等传统工具。其核心优势包括:

  1. 极速性能:依赖解析和安装速度比 pip 快 10-100 倍,尤其适合大型项目或 CI/CD 环境。
  2. 功能集成
    • 统一管理包安装、虚拟环境、Python 版本和依赖锁定。
    • 支持 pyproject.tomluv.lock 文件,确保环境一致性。
  3. 兼容性
    • 兼容现有 requirements.txtpip 命令。
    • 跨平台支持(Windows/macOS/Linux)。

二、常用 uv 命令速查

按功能分类整理如下:

功能类别命令示例作用
虚拟环境管理uv venv创建虚拟环境(默认生成 .venv 目录)
uv venv --python 3.12指定 Python 版本创建环境
依赖管理uv add requests添加依赖并更新 pyproject.toml
uv add --dev pytest添加开发依赖
uv remove flask移除依赖
uv sync根据 pyproject.tomluv.lock 同步环境
uv pip install -r requirements.txt从文件安装依赖(加速版 pip
项目初始化uv init初始化项目(生成 pyproject.tomluv.lock
工具执行uv run python app.py在虚拟环境中运行脚本(自动激活环境)
uvx ruff check .直接运行工具(无需安装)
Python 版本管理uv python install 3.12安装指定 Python 版本
依赖分析uv tree查看依赖树

:更多命令可通过 uv --help 查看。


三、从零构建虚拟环境:完整流程

步骤 1:安装 uv
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"# 或通过 pip(需环境隔离)
pipx install uv  # 推荐
pip install uv   # 备用

安装后验证:uv --version

步骤 2:创建虚拟环境
uv venv .venv      # 创建虚拟环境到 .venv 目录
uv venv --python 3.11  # 指定 Python 版本
步骤 3:激活虚拟环境
# macOS/Linux
source .venv/bin/activate# Windows
.venv\Scripts\activate
步骤 4:安装与管理依赖
uv add flask                   # 添加生产依赖(自动更新 pyproject.toml)
uv add --dev pytest            # 添加开发依赖
uv sync                        # 同步所有依赖到环境
步骤 5:运行项目
uv run python app.py  # 自动在虚拟环境中执行
步骤 6:依赖一致性保障
  • 生成锁文件:uv lock(根据 pyproject.toml 生成 uv.lock)。
  • 导出传统依赖文件:uv export -o requirements.txt

四、实战示例:Flask 项目初始化

$ mkdir myapp && cd myapp$ uv init                     # 生成 pyproject.toml README.md main.py
Initialized project `myapp`
$ ls
main.py  pyproject.toml  README.md
$ cat pyproject.toml 
[project]
name = "myapp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []
$ uv add flask                # 添加 Flask 依赖
Using CPython 3.11.11
Creating virtual environment at: .venv
Resolved 9 packages in 656ms
Prepared 6 packages in 661ms
Installed 7 packages in 3ms+ blinker==1.9.0+ click==8.2.1+ flask==3.1.1+ itsdangerous==2.2.0+ jinja2==3.1.6+ markupsafe==3.0.2+ werkzeug==3.1.3
$ uv sync                     # 安装依赖到虚拟环境
Resolved 9 packages in 0.54ms
Audited 7 packages in 0.00ms
$ ls
main.py  pyproject.toml  README.md  uv.lock
$ cat pyproject.toml 
[project]
name = "myapp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = ["flask>=3.1.1",
]
$ gedit app.py

输入

from flask import Flask
app = Flask(__name__)@app.route("/")
def hello():return "Hello, UV!"if __name__ == "__main__":app.run(host="0.0.0.0", port=4500)  # 显式启动服务器

运行:

$ uv run python app.pyuv run python app.py * Serving Flask app 'app'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:4500* Running on http://192.168.0.3:4500
Press CTRL+C to quit

访问 http://localhost:4500 即可查看结果。


五、配置优化技巧

  1. 安装包配置源
$ uv pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

or

uv add  requests --default-index https://mirrors.aliyun.com/pypi/simple
  1. 切换国内镜像源(如阿里源):
    ~/.config/uv/uv.toml 中添加:
$ cat ~/.config/uv/uv.toml
[[index]]
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true  # 设为默认源
  1. 离线模式
    uv sync --offline 仅使用本地缓存。

六、与传统工具对比

工具优势场景局限性
uv速度极快、依赖锁定、一体化管理较新,生态兼容性在演进中
pip原生支持、无需额外安装速度慢、无依赖锁定
conda数据科学库支持、跨语言依赖体积大、启动慢
poetry依赖分组、打包发布学习曲线陡峭

推荐新项目优先使用 uv,复杂科学计算场景考虑 conda

通过 uv,开发者可大幅提升环境构建效率,彻底解决“依赖漂移”问题,实现开发与生产环境 100% 一致。

http://www.dtcms.com/a/328991.html

相关文章:

  • 联网车辆功能安全和网络安全的挑战与当前解决方案
  • TraeCN与Cursor对比分析:双雄争锋下的AI编程工具演进之路
  • 河南萌新联赛2025第(五)场:信息工程大学”
  • 弹性扩展新范式:分布式LLM计算的FastMCP解决方案
  • 卷积神经网络(CNN):卷积和池化
  • 一周学会Matplotlib3 Python 数据可视化-绘制热力图(Heatmap)
  • Date/Calendar/DateFormat/LocalDate
  • 分段锁和限流的间接实现
  • Mundi.ai: AI原生GIS
  • 无障碍为什么会读取data-fileid属性,而不读取aria-label属性
  • 【Java虚拟机】JVM内存模型
  • OpenCV常见问题汇总
  • XML头部声明发送者信息的实现方法
  • k8s基本概念
  • vue3:customRef 自定义ref
  • 深度学习模型实现高效公平调度-MU-MIMO场景
  • 面试实战 问题二十九 Java 值传递与引用传递的区别详解
  • 解决Vscode每次连接ssh登入需要输入密码问题(免密登入)
  • NLP自然语言处理: FastText工具与迁移学习基础详解
  • Maven配置Docker插件推送至远程私有仓库
  • 【论文笔记】DOC: Improving Long Story Coherence With Detailed Outline Control
  • Linux应用软件编程---UI技术(frambuffer、内存映射、函数封装、打印各类图形)
  • 数据结构初阶(12)排序算法—插入排序(插入、希尔)(动图演示)
  • 【Datawhale AI 夏令营】金融文档分析检索增强生成系统的架构演变与方法论进展
  • CAN仲裁机制的原理
  • Android中获取状态栏高度
  • 用好Spring AI向量存储,全面释放AI潜能:打造高效RAG应用的加速引擎
  • Jetson NX Python环境搭建:使用APT轻松安装NumPy, scikit-learn, OpenCV
  • 【OSPP 开源之夏】Good First issue 第一步—— openEuler Embedded 计划
  • 机器学习⑤【线性回归(Linear Regression】