网站首页 > 技术文章 正文

开源软件总是将创新带入我们的技术栈,在Python界,高效的包管理器是每个Python开发者的梦想。今天,让我们一起深入了解并应用一个名为uv的开源项目,这是一个在Rust中编写的极速Python包安装及解析器!
uv项目概述
uv作为pip、pip-tools和virtualenv的替代品,不仅在速度上有显著提升,还在磁盘利用率、便携性和功能上进行了优化。它由Astral公司后援,Astral还是Ruff这个项目的创造者。让我们来看看uv都提供了哪些特色功能:
- 作为pip和pip-tools常见命令的替代品
- 速度比pip和pip-tools快10到100倍
- 有效利用磁盘空间,通过全局缓存来去重依赖
- 无需Rust或Python环境,通过curl、pip、pipx等即可安装
- 支持macOS、Linux和Windows
- 提供版本覆盖和备选解析策略等高级功能
- 错误消息友好,内置冲突跟踪解析器
安装及快速开始
可以通过以下一种或多种方法安装uv:
# 在macOS和Linux上
curl -LsSf https://astral.sh/uv/install.sh | sh
# 在Windows上
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 通过pip安装
pip install uv
# 通过pipx安装
pipx install uv
# 通过Homebrew安装
brew install uv
# 通过Pacman安装
pacman -S uv
创建虚拟环境,很简单:
uv venv # 在.venv中创建虚拟环境。
激活虚拟环境:
# 在macOS和Linux上
source .venv/bin/activate
# 在Windows上
.venv\Scripts\activate
在虚拟环境中安装包:
uv pip install flask # 安装Flask
uv pip install -r requirements.txt # 从requirements.txt文件中安装
uv pip install -e . # 以可编辑模式安装当前项目
uv pip install "package @ ." # 从磁盘安装当前项目
uv pip install "flask[dotenv]" # 安装带有"dotenv"额外依赖的Flask
从输入文件生成一组锁定的依赖项:
uv pip compile pyproject.toml -o requirements.txt # 读取pyproject.toml文件
uv pip compile requirements.in -o requirements.txt # 读取requirements.in文件
与虚拟环境同步一组锁定的依赖项:
uv pip sync requirements.txt # 从requirements.txt文件安装
高级使用
Python发现
uv不依赖Python,但需要定位Python环境来安装依赖和构建源分发。执行pip sync或pip install时,uv会按下面的顺序搜索虚拟环境:
- 基于VIRTUAL_ENV环境变量激活的虚拟环境。
- 基于CONDA_PREFIX环境变量激活的Conda环境。
- 当前目录或最近父目录的.venv中的虚拟环境。
如果找不到虚拟环境,uv将提示用户在当前目录通过uv venv创建一个。
运行pip compile时,uv不需要虚拟环境,并将按以下顺序搜索Python解释器:
- ...(与上面相同)...
如果提供了版本号,如--python-version=3.7,uv还会根据该版本号搜寻解释器。
安装到任意Python环境
由于uv不依赖Python,所以它甚至可以安装到除自己之外的虚拟环境。例如,设置VIRTUAL_ENV=/path/to/venv会导致uv安装到指定路径,无论uv安装在哪里。
Git身份验证和HTTP身份验证
uv支持从Git安装包,同时支持SSH和带密码或token的私有仓库。提供了用于HTTP认证的多种源。
依赖项缓存及解析策略
uv使用积极缓存策略避免重复下载和构建。例如,可以通过uv pip install --refresh或uv cache clean清除缓存。默认情况下,uv倾向于安装每个包的最新兼容版本,也可以修改解析策略。
平台与环境变量支持
uv支持包括macOS(Apple Silicon和x86_64)、Linux(x86_64)以及Windows(x86_64)在内的第一层平台。对于环境变量,可以设置如SSL_CERT_FILE和RUST_LOG等。
猜你喜欢
- 2024-12-19 栈的应用:表达式转换
- 2024-12-19 数据结构与算法——链式栈的相关操作
- 2024-12-19 深入解析 Python 断点调试:用好工具,高效定位问题!
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)