一、为什么选择 uv
1、传统 python 环境管理的痛点
刚接触 python 项目时,我们通常会依次安装 python、创建虚拟环境、激活环境,再使用 pip 安装依赖:
python -m venv .venv .\.venv\scripts\activate.ps1 pip install -r requirements.txt
这套流程可以使用,但项目一多,就容易遇到下面的问题:
- 不同项目要求的 python 版本不同;
- 虚拟环境建好了,ide 却选中了另一个解释器;
requirements.txt只记录直接依赖,换电脑后版本可能不完全一致;- 下载大量依赖耗时较长,多个项目还会重复下载;
pip、虚拟环境和 python 版本需要分别管理。
uv 将 python 版本、虚拟环境、依赖和锁文件统一到了一套工作流中。拿到包含 pyproject.toml 和 uv.lock 的项目后,通常只需要:
uv python pin 3.10.18 uv sync --locked
uv 就会选择指定的 python、创建项目专属的 .venv,并按照锁文件安装准确版本的依赖。
2、本文最终要完成什么
本文使用的环境如下:
操作系统:windows 11 终端:windows powershell uv:0.11.31 python:3.10.18 开发工具:pycharm
最终目录规划为:
d:\uvprogram\ ├─ uv.exe ├─ uvx.exe ├─ uvw.exe └─ uv\ ├─ bin\ ├─ cache\ ├─ python\ └─ tools\
其中,uv 程序、python、缓存和工具都放在 d 盘,系统盘不会因为后续学习多个项目而持续增长。
二、安装 uv
1、使用官方安装脚本
在 powershell 中可以执行官方安装命令:
powershell -executionpolicy bypass -c "irm https://astral.sh/uv/install.ps1 | iex"
也可以通过 windows 包管理器安装:
winget install --id=astral-sh.uv -e
如果已经从 uv 发布页面获得了 uv.exe、uvx.exe 和 uvw.exe,也可以直接解压使用。本文采用的就是这种方式,三个文件放在:
d:\uvprogram
uv 是独立可执行程序,不需要再通过传统安装向导安装。

2、将 uv 加入 path
仅仅把 uv.exe 放进文件夹还不够。windows 必须知道去哪里寻找 uv 命令,因此需要把下面的目录加入当前用户的 path:
d:\uvprogram d:\uvprogram\uv\bin
可以按 win + r,输入:
sysdm.cpl
然后依次进入“高级”→“环境变量”→“用户变量”→“path”进行添加。


3、验证安装结果
修改环境变量后,要关闭已经打开的 powershell 和 pycharm,再重新打开。旧进程不会自动读取刚刚写入的环境变量。
执行:
uv --version
只要能够正常显示版本号,就说明 uv 已经可以使用。还可以检查 windows 实际调用的是哪个文件:
where.exe uv
本文的预期路径是:
d:\uvprogram\uv.exe

三、规划 uv 的数据目录
1、四个目录分别保存什么
为了便于维护,我在 d:\uvprogram\uv 下建立了四个目录:
| 目录 | 用途 |
|---|---|
bin | 保存 uv 管理的命令入口 |
cache | 保存 python 和依赖包的下载缓存 |
python | 保存 uv 安装的 python 版本 |
tools | 保存通过 uv tool install 安装的独立工具 |
用于下载 python、安装依赖或安装工具等内容到对应目录中。
2、使用 powershell 一次完成配置
下面的命令会创建目录、写入用户环境变量,并补充用户 path。如果你的安装位置不同,只需要修改第一行。
$uvprogram = "d:\uvprogram"
$uvdata = "$uvprogram\uv"
$uvbin = "$uvdata\bin"
new-item -itemtype directory -force -path `
$uvbin, `
"$uvdata\cache", `
"$uvdata\python", `
"$uvdata\tools" | out-null
[environment]::setenvironmentvariable(
"uv_install_dir", $uvprogram, "user"
)
[environment]::setenvironmentvariable(
"uv_cache_dir", "$uvdata\cache", "user"
)
[environment]::setenvironmentvariable(
"uv_python_install_dir", "$uvdata\python", "user"
)
[environment]::setenvironmentvariable(
"uv_python_bin_dir", $uvbin, "user"
)
[environment]::setenvironmentvariable(
"uv_tool_dir", "$uvdata\tools", "user"
)
[environment]::setenvironmentvariable(
"uv_tool_bin_dir", $uvbin, "user"
)
$userpath = [environment]::getenvironmentvariable("path", "user")
$pathitems = @($userpath -split ";" | where-object { $_ })
if ($pathitems -notcontains $uvprogram) {
$pathitems += $uvprogram
}
if ($pathitems -notcontains $uvbin) {
$pathitems += $uvbin
}
[environment]::setenvironmentvariable(
"path", ($pathitems -join ";"), "user"
)
write-host "配置完成,请关闭终端后重新打开。" -foregroundcolor green

这里需要注意:uv_install_dir 主要决定 uv 安装程序存放可执行文件的位置;缓存、python 和工具目录则分别由其他变量控制。
四、使用 uv 安装 python 3.10.18
1、安装指定版本
重新打开 powershell,执行:
uv python install 3.10.18
安装成功后会出现类似结果:
installed python 3.10.18 + cpython-3.10.18-windows-x86_64-none

第一次安装需要从网络下载 python,因此十几秒甚至更久都属于正常情况。老师演示只用了几秒,通常是因为网络更快,或者对应文件已经存在于本地缓存中,并不代表自己的操作有问题。
2、检查 python 是否安装成功
查看已经安装的版本:
uv python list --only-installed
查找 python 3.10.18 的实际位置:
uv python find 3.10.18
这里安装的是由 uv 管理的 python,不需要把它当作普通 python 安装包再执行一次安装程序。
五、为项目创建独立环境
1、先认识三个核心文件
一个使用 uv 管理的项目通常会包含:
| 文件 | 作用 |
|---|---|
pyproject.toml | 声明项目基本信息、python 要求和直接依赖 |
uv.lock | 锁定直接依赖和间接依赖的准确版本 |
.python-version | 指定当前项目使用的 python 版本 |
如果老师已经提供了 pyproject.toml 和 uv.lock,就不需要重新执行 uv init,不要随意修改老师锁定的依赖版本。
2、固定项目的 python 版本
先进入项目根目录。本文的项目目录为:
set-location "d:\jupyter_projects\pythonproject\大模型学习\modelchat"
然后执行:
uv python pin 3.10.18
这条命令会在项目根目录生成 .python-version,文件内容只有:
3.10.18

3、根据锁文件同步依赖
继续在项目根目录执行:
uv sync --locked
这条命令会完成四件事:
- 检查
pyproject.toml与uv.lock是否一致; - 自动创建项目目录下的
.venv; - 选择 python 3.10.18;
- 按照锁文件安装准确版本的全部依赖。
--locked 表示不允许在同步过程中偷偷更新锁文件。如果项目声明与锁文件不一致,uv 会直接提示错误,这有助于保证学生和老师使用同一套环境。
第一次同步时,终端可能连续显示很多绿色的 + 和包名。这表示依赖正在安装。

uv 默认执行“精确同步”:不在项目依赖声明中的额外包可能会被移除。因此,日常应优先通过 pyproject.toml、uv add 和 uv sync 管理项目依赖。
4、验证环境是否真正可用
检查项目使用的 python:
uv run python --version
预期结果:
python 3.10.18
再验证课程中会使用的主要依赖:
uv run python -c "import streamlit, langchain, openai; print('环境配置成功')"
如果输出:
环境配置成功
说明 python、虚拟环境和依赖都已经可以正常使用。

六、在 pycharm 中选择正确的解释器
1、uv 配置完成后为什么还要选择解释器
uv 负责创建和维护运行环境,pycharm 负责编辑、分析和运行代码。两者分工不同。
即使 .venv 已经创建成功,pycharm 也不一定知道当前项目应该使用哪个 python,因此仍需要关联一次项目解释器:
项目根目录\.venv\scripts\python.exe
本文对应的路径是:
d:\jupyter_projects\pythonproject\大模型学习\modelchat\.venv\scripts\python.exe
在 pycharm 中进入“设置”→“python”→“解释器”→“添加解释器”→“添加本地解释器”,选择“现有环境”,再定位到上面的文件。

配置完成后,右下角应显示类似:
python 3.10 (modelchat)
2、notebook 还要检查内核
打开 .ipynb 后,notebook 使用的内核也应该来自项目 .venv。可以在单元格中运行:
import sys print(sys.executable)
正确结果应指向:
项目根目录\.venv\scripts\python.exe
pycharm 界面中的“ide 托管服务器(auto)”指的是 jupyter 服务连接方式,不等于 python 解释器本身。
七、常见问题与解决方法
1、输入 uv 后提示找不到命令
先临时把 uv 加入当前 powershell:
$env:path = "d:\uvprogram;$env:path" uv --version
如果这样可以运行,说明 uv 本身没有问题,真正的原因是用户 path 没有配置正确,或者修改环境变量后没有重启终端。
2、刚创建的 cache、python 和 tools 都是空的
这是正常现象。文件夹只是预先规划的存储位置:
- 安装 python 后,
python才会出现内容; - 下载 python 或依赖后,
cache才会出现内容; - 使用
uv tool install后,tools才会出现内容。
空文件夹不代表配置失败。
3、pycharm 提示 no module named pip
uv 自己能够安装依赖,所以 uv 创建的环境不一定预装 pip。但部分 pycharm 版本的软件包管理界面仍会调用 pip,此时可在项目根目录执行:
uv pip install pip

这是一项 ide 兼容措施,不是 uv 正常工作的必要条件。并且由于 uv sync 默认采用精确同步,后续再次同步时,未声明在项目中的 pip 可能被移除。
4、程序可以运行,但编辑器仍然标红
这种情况通常不是运行环境错误,而是 pycharm 的代码索引尚未更新。
先在 pycharm 终端执行:
python -c "import sys, langchain_openai; print(sys.executable); print(langchain_openai.__file__)"
如果输出指向项目 .venv,而且代码能够正常运行,就说明依赖已经安装。此时可以重新选择解释器,等待索引完成,必要时再使用 pycharm 的“使缓存失效并重启”。
不要为了消除红线随意升级老师锁定的依赖,否则可能让代码和课程环境产生版本差异。
5、为什么不应该复制别人的 .venv
.venv 中可能包含原电脑和原项目的绝对路径,直接复制或移动后容易失效。
真正应该保存和传递的是:
pyproject.toml uv.lock .python-version
换电脑或移动项目后,在新的项目目录重新执行:
uv sync --locked
这也是锁文件存在的意义:传递环境说明,而不是传递一整个虚拟环境文件夹。
八、常用命令速查
1、python 与项目管理
# 查看 uv 版本 uv --version # 安装指定 python uv python install 3.10.18 # 查看已安装的 python uv python list --only-installed # 为当前项目固定 python uv python pin 3.10.18 # 按锁文件同步项目 uv sync --locked # 查看依赖树 uv tree
2、运行项目
# 查看项目环境中的 python 版本 uv run python --version # 运行普通 python 文件 uv run python main.py # 启动 streamlit uv run streamlit run main.py # 启动 jupyter lab uv run jupyter lab
uv run 会在执行命令前检查项目环境,因此平时即使不手动激活 .venv,也能确保命令在正确的环境中运行。
九、总结
本文完成了 windows 11 下 uv、python 3.10.18、项目虚拟环境和 pycharm 解释器的完整配置。
整个过程最值得记住的是:
uv.exe所在目录必须加入path;- 每个项目应拥有独立的
.venv; .python-version用于固定 python 版本;pyproject.toml用于声明项目依赖;uv.lock用于锁定完整依赖版本;- 已有锁文件时优先执行
uv sync --locked; - pycharm 需要关联项目的
.venv\scripts\python.exe; - 不要复制别人的
.venv,应在本机通过锁文件重新同步。
完成这套基础环境后,后续学习 langchain、rag、streamlit 和 agent 时,就可以继续复用同一套 uv 工作流,同时让不同项目的依赖彼此隔离。
到此这篇关于windows下uv安装与环境配置的文章就介绍到这了,更多相关windows uv安装与环境配置内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论