开篇先简单对比一下两者,
看不懂也没关系,后面我会用实战给你演示。
1. 以前 Anaconda 的逻辑:手动挡
- 第一步: 你先去 Anaconda 软件里手动创建一个环境(比如叫
my_env)。 - 第二步: 你得"激活"它(
conda activate)。 - 第三步: 你在里面安装包。
- 第四步: 你去 PyCharm 那个长长的列表里,翻半天找到这个
my_env的路径,把它选上。
2. 现在 uv 的逻辑:全自动挡
uv 的逻辑是:项目即环境。
- 不用提前建环境: 你只需要在项目文件夹里输入
uv init。它会自动生成一个pyproject.toml(这个文件就是你的"点菜清单")。 - 自动管理解释器: 你以前要自己下载安装 Python(没python用不了pip),现在你在项目里说一句"我要用 Python 3.12",uv 发现你没装的话,它会静默帮你下载好。你不需要去官网找安装包。
- PyCharm 对接更简单: 在 PyCharm 里,你直接选"uv",它会自动扫描项目里的那个清单(
pyproject.toml),然后自动 把该装的包都装在项目目录下的.venv文件夹里。
下面开始实战。
我们首先安装一下uv。
1. 安装UV步骤
-
在任务栏的搜索框输入 PowerShell ,右键点击"以管理员身份运行"。
-
复制下面这一行命令并粘贴进去(按回车):
PowerShell
arduinopowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
3验证安装:
安装完成后,关闭当前的 PowerShell 窗口,重新打开一个。输入以下命令:
PowerShell
cssuv --version如果你看到了类似
uv 0.x.x的版本号,恭喜你,已经装好了!
我把基本语法罗列了出来,看不懂就直接跳到下面的实战。
这个是和pip的对比
| 命令 | 用途 | 对应传统命令 |
|---|---|---|
uv venv |
在当前目录创建虚拟环境 (.venv) |
python -m venv .venv |
uv pip install <pkg> |
安装指定的 Python 包 | pip install <pkg> |
uv pip freeze |
列出已安装的包及其版本 | pip freeze |
uv pip compile |
将 pyproject.toml 转为 requirements.txt |
pip-compile |
uv pip sync |
根据 lock 文件同步环境(删除多余包) | pip-sync |
UV项目管理(新一代工作流)
如果你在开发一个完整的项目,这个是 uv 的项目模式,它会自动处理虚拟环境。
uv init:在当前文件夹初始化一个新的 Python 项目(生成pyproject.toml)。uv python find:查看当前项目正在使用的是哪个路径下的 Python。uv add <pkg>:添加依赖并自动更新pyproject.toml和锁文件。uv remove <pkg>:移除依赖。uv sync:确保项目环境与锁文件完全一致。uv run <script.py>:最强命令之一。它会自动在虚拟环境中运行脚本,如果环境不存在,它会帮你建好。
Python 版本管理
再也不需要 pyenv 或手动下载 Python 了。
uv python install 3.12:下载并安装指定版本的 Python。uv python list:查看系统中已安装的和可供下载的 Python 版本。uv python pin 3.11:固定当前项目使用的 Python 版本。
工具运行 (uvx)
如果你只想临时运行一个工具(比如 ruff 或 black),而不想把它安装到全局:
-
uvx <tool>:下载、缓存并运行一个 Python 工具。比如:
uvx ruff check .
多说无益,我们来实战一下
简单介绍下我的现状:
我之前的默认环境是Anaconda,然后我现在新建了一个项目,我需要用这个UV来帮我去管理环境
以前的流程是,我需要在Anaconda新建一个环境,然后激活这个环境,然后在里面下载我这个需要的包,而且包如果比较大的话,时间会比较长,流程会比较繁琐
我们来看看UV怎么样
打开cmd

uv python find
可以看到我们用的是Unconductor的默认环境

切换到我们的项目路径

然后执行
uv init

这个问题是因为 uv init 默认会把你的当前文件夹名("图片")作为 Python 项目的名字。
但在 Python 的规范里,项目/包名不能包含中文字符 ,只能使用字母、数字、下划线 _ 或连字符 -。
我们改完文件名再重新回到CMD
回到我们的项目目录

输入
uv init
这一步是进行项目初始化,这样就成功了

我们看看它给我们生成了什么
pyproject.toml
.gitigore
.python-version
我们拆解下:
1. pyproject.toml ------ 项目的"大脑"
这是最重要 的一个文件。在现代 Python 开发中,它取代了以前乱七八糟的 setup.py、requirements.txt 和各种工具的配置文件。
- 干嘛用的 :它记录了项目的元数据(名字、版本、作者)以及项目依赖。
- 怎么用 :当你运行
uv add pillow时,uv会自动把pillow写进这个文件里。以后你把项目发给别人,别人只需要运行uv sync,uv就会根据这个文件里的清单,把所有的包原封不动地装好。
2. readme.md ------ 项目的"脸面"
这是一个标准的 Markdown 文档。
- 干嘛用的:用来写项目的自我介绍。
3. .gitignore ------ 项目的"过滤器"
- 干嘛用的 :用 Git 来管理代码,这个文件会告诉 Git:"哪些东西不要上传"。
- 为什么重要 :
uv自动帮你写好了规则。它会忽略.venv(虚拟环境文件夹)。因为虚拟环境很大且因人而异,我们通常只分享代码和配置文件(如pyproject.toml),让别人在自己电脑上重新生成环境。
4. .python-version ------ 版本的"锚点"
这是 uv 非常贴心的一个设计。
- 干嘛用的 :它里面只写了一个版本号(比如
3.12)。 - UV最大优势 :当你在这个文件夹下运行
uv run时,uv会先看一眼这个文件。如果它发现你系统里没装 3.12,它会自动帮你下载一个纯净的 3.12 放在缓存里,确保你的项目永远运行在正确的 Python 版本上。
确实很人性化,这真是为python程序员量身定制的。
好,我们回到cmd
我这个项目用到了这个包,我先安装一下
输入
uv add pillow
速度比pip和conda快不少,
从终端输出里,我们可以看到几个非常关键的信息:
- 它借用了 Anaconda :
uv发现我的电脑里已经有D:\Anaconda3\python.exe了,所以它很聪明地直接拿这个版本作为基础来创建环境,没让我再等下载。 - 创建了
.venv:它在我的image文件夹里建了一个 虚拟环境。 - 安装成功 :
pillow==12.1.1已经下载好了。

如果我们不想要这个版本的Python
可以在之前就用
uv python install 3.11
我这个是已经构建了
所以我需要用这个命令改一下
uv python pin 3.13

然后我们来同步一下,让它按照说明书来同步环境
输入
uv sync

验证一下看现在是什么环境
输入
uv run python --version
没问题,他还自动下载了 pilow

忘了说了,前面UA还生成了一个main.py
我们运行下
uv run main.py

下面是uv最屌的
他会自动下包,
我们来一起操作一下
用pycharm打开我们的2.2py
开头加上
shell
# /// script
# dependencies = [
# "numpy",
# "pillow",
# ]
# ///

回到cmd
输入
uv run 2.2.py
自动下载了numpy

这个的确能方便我们以后来进行项目管理

我们把pycharm里面的这个环境,也换成我们刚才uv创建的这个环境
点击我们用的这个环境 ,我这里是D:Anaconda3
再点击 解释器设置

添加本地解释器

因为它用的是venv
直接弹窗让我们用这个环境了
点击 选择现有解释器

我们运行一下
缺numpy

为啥没全自动下好?
uv run 确实全自动下包了,但它为了不把你的项目环境搞乱,把包装进了一个"临时环境"。
| 模式 | 你的操作 | 它是怎么干活的 | 结果 |
|---|---|---|---|
| 项目模式 (安家) | uv add numpy |
它把 numpy 写进"说明书"(pyproject.toml),然后装进我们的"项目环境"(.venv)。 |
PyCharm 变绿了,以后谁都能用。 |
| 脚本模式 (住酒店) | uv run 2.2.py (带注释) |
它看到注释,认为:"这只是个临时任务,我单独给它下好包跑完就行,别弄脏了主人的特定的.venv。" |
PyCharm 依然报红,因为它没进项目环境。 |
我们打开看看,他下载了在临时目录
这样挺高明的,跑代码可以直接用这个临时环境(主环境)
平常项目的时候可以用项目环境

我们回到cmd
输入
uv add numpy

再回到pycharm
执行一下Py
没问题

⚠️ 给 Anaconda 用户的3 个提醒
-
路径的区别:
- Anaconda :环境通常存在
C:\Users\Name\anaconda3\envs...。 - uv :环境默认就在你项目文件夹里的
.venv。删掉这个文件夹,环境就没了,非常干净,但你也别误删了。
- Anaconda :环境通常存在
-
如何迁移依赖? :
如果你的项目原本有一个
requirements.txt,你可以运行:Bash
csharpuv add -r requirements.txt这会把旧包全部搬进
uv的管理体系里,更方便快捷。 -
和uv互不干扰:
你可以同时安装 Anaconda 和
uv。在同一个项目里,你用python main.py调用的是 Anaconda 的默认环境,而用uv run main.py调用的是uv的环境。不过我建议既然用了uv,就全程使用uv命令。
总结一下:为什么从 Anaconda 切换到 uv?
通过实战可以看到,uv 的优势非常明显:
-
项目即环境,管理更轻松
- uv 自动在项目文件夹生成
.venv,不再需要手动创建、激活环境,也不用在 PyCharm 里翻半天找解释器。 - 项目依赖写在
pyproject.toml,一条命令就能同步环境,团队协作更顺畅。
- uv 自动在项目文件夹生成
-
Python 版本自动化管理
- 可以直接用
uv python install <version>下载指定版本,.python-version锚定项目版本,保证项目在正确的 Python 上运行。 - 这极大避免了安装多个解释器、手动切换版本的繁琐流程。
- 可以直接用
-
依赖安装更快、更智能
uv add <pkg>将包直接装进.venv,保持环境干净;uv run <script.py>可临时运行脚本、自动下包,不污染主环境;- 临时环境和项目环境互不干扰,灵活性高。
-
IDE 对接无压力
- PyCharm 直接选择
.venv即可,环境一致性有保证,运行、调试更顺畅。
- PyCharm 直接选择
-
平滑迁移和共存
- 原来的 Anaconda 环境可以保留,同时迁移旧项目依赖非常简单(
uv add -r requirements.txt)。 - 不用担心和旧环境冲突,可以逐步切换到 uv 全流程管理。
- 原来的 Anaconda 环境可以保留,同时迁移旧项目依赖非常简单(
如果你是一个像我一样,受够了 Anaconda 臃肿和 Pip 缓慢的开发者,uv 就是那个能让你重新爱上 Python 开发的神器。
感谢看完,如果觉得这篇"技术教程"对你有帮助,随手点个赞、在看、转发三连吧。
如果想第一时间看到我的技术教程,也可以给我个星标 * ⭐*。
~~谢谢你看我的文章,我们,下期再见。