ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

uv venv 实战:从零到隔离环境 30 秒,Python 版本自动搞定

uv venv 实战:从零到隔离环境 30 秒,Python 版本自动搞定

uv venv 实战:从零到隔离环境 30 秒,Python 版本自动搞定

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

一个项目钉死在 3.11,另一个非要 3.12,系统 Python 两头都切不过去;virtualenv 每建一个环境都要干等一会儿。uv venv 把这个痛点压成一条命令:.venv立刻就绪,指定的 Python 版本机器上没有就直接下载。下面按日常流程走:装 uv、建环境、激活、锁定版本。

从零到第一个可用的 .venv

Linux / macOS 安装

一条命令装 uv,装完顺手验证一下:

curl -LsSf https://astral.sh/uv/install.sh | sh uv --version

Windows 安装

PowerShell 里一条命令:

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

一条命令建好 .venv

在项目目录里执行,当前目录下就出现.venv:

uv venv # 换个名字或路径也行 uv venv myenv

如果你习惯python -m venv,命令可以原样替换,uv 就是当 venv 的替代品在用,只是速度快一个量级。装完环境后,往里装包直接uv pip install <包名>就行,后面会用到。

uv 快的原因不只是语言,缓存机制也省掉了重复下载:

创建时指定 Python 版本

-p是--python的简写,格式不用死记,能写对下面几种就够用:

uv venv -p 3.11 # 任意一个 3.11.x uv venv -p 3.12.3 # 精确到补丁版本 uv venv -p cpython@3.12 # 指定实现(cp / pypy / graalpy 都可以)

指定的版本本机没有时,uv 会先下载再建环境,不用手动装 Python。

激活、运行与自动发现

激活就是把终端里的python指到环境内部,按 shell 选对应脚本。

bash / zsh

source .venv/bin/activate

fish

source .venv/bin/activate.fish

csh / tcsh

source .venv/bin/activate.csh

nushell

use .venv/bin/activate.nu

Windows CMD

.venv\Scripts\activate.bat

PowerShell

.venv\Scripts\Activate.ps1

激活成功后提示符前会出现(.venv)。干完活想退出,敲deactivate就行,所有 shell 通用。

不激活直接跑:uv run

日常其实经常不用激活。uv run会自己找到环境并在其中执行命令:

uv run python script.py uv run pip list

这也是为什么团队协作时不用纠结"你有没有激活"——只要.venv在,结果就是可复现的。

uv 怎么找到环境

查找顺序就三条:

  1. 已激活的环境(VIRTUAL_ENV环境变量)
  2. 当前目录及其父目录里的.venv
  3. uv run所在项目目录(有pyproject.toml)对应的.venv

版本管理深水区:查、预装、锁定

看一眼有哪些版本可用

交互式选版本前先摸底,3.12和pypy都是过滤条件:

uv python list uv python list 3.12 uv python list pypy

预装指定版本

不想在建环境时才触发下载,就提前装好:

uv python install 3.11

顺带说一句,uv python upgrade 3.12可以把 uv 管理的版本升到最新补丁版(3.12.1 → 3.12.3),不跨小版本,也不支持 PyPy 等实现。

锁定项目的 Python 版本

两个文件解决两类问题,建议都放进仓库:

  • .python-version:在项目根目录放一个纯文本文件,内容就一行版本号,比如3.12.3。在该目录及子目录里跑任何 uv 命令,都会优先按它选解释器。
  • uv.toml:用python-preference控制 uv 在"系统 Python"和"uv 下载的 Python"之间怎么取舍:
python-preference = "only-system"

四个取值的差别:managed(默认,uv 下载的版本优先,但系统已有的同版本仍优先用系统的)、only-managed(禁用系统 Python)、system(系统优先)、only-system(完全不让 uv 下载)。公司内网机器装不上外部 Python 时,改这一行最省事。

缓存:看一眼、清一下

Python 发行版和下载的包都缓存在本地,目录位置与清理各一条命令:

uv cache dir uv cache clean

卡住了:三个高频坑

PowerShell 拒绝执行激活脚本

症状:报"无法加载文件 ...Activate.ps1,因为在此系统上禁止运行脚本"。原因:Windows 默认执行策略是Restricted。修复:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

uv run 没走 .venv

症状:.venv明明存在,uv run却慢得像冷启动,解释器版本也不对。原因:目录里没有pyproject.toml,uv 不认这是个项目,直接建了临时环境。修复:

uv init

生成pyproject.toml后uv run就会走.venv。

-p指定的版本满足不了

症状:uv venv -p 3.13报找不到解释器。原因:要么这个版本号不存在,要么当前网络拉不到下载源。修复:

uv python list

先确认要装的版本真实存在,再手动uv python install一遍,能单独定位是网络问题还是版本号写错。

IDE 还在用系统解释器跑代码的话,把 PyCharm 或 VS Code 的解释器指到.venv/bin/python(Windows 是.venv\Scripts\python.exe)即可,环境本身不用动。

uv venv 的价值一句话:建环境一条命令,版本一条命令。更多细节见 first-steps.md。

【免费下载链接】uvAn extremely fast Python package and project manager, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/uv/uv

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进