UV实战教程,我啥要从Anaconda切换到uv来管理包?

0 阅读9分钟

开篇先简单对比一下两者

看不懂也没关系,后面我会用实战给你演示。

1. 以前 Anaconda 的逻辑:手动挡

  1. 第一步: 你先去 Anaconda 软件里手动创建一个环境(比如叫 my_env)。
  2. 第二步: 你得“激活”它(conda activate)。
  3. 第三步: 你在里面安装包。
  4. 第四步: 你去 PyCharm 那个长长的列表里,翻半天找到这个 my_env 的路径,把它选上。

2. 现在 uv 的逻辑:全自动挡

uv 的逻辑是:项目即环境

  1. 不用提前建环境: 你只需要在项目文件夹里输入 uv init。它会自动生成一个 pyproject.toml(这个文件就是你的“点菜清单”)。
  2. 自动管理解释器: 你以前要自己下载安装 Python(没python用不了pip),现在你在项目里说一句“我要用 Python 3.12”,uv 发现你没装的话,它会静默帮你下载好。你不需要去官网找安装包。
  3. PyCharm 对接更简单: 在 PyCharm 里,你直接选“uv”,它会自动扫描项目里的那个清单(pyproject.toml),然后自动把该装的包都装在项目目录下的 .venv 文件夹里。

下面开始实战。

我们首先安装一下uv。

1. 安装UV步骤

  1. 在任务栏的搜索框输入 PowerShell,右键点击“以管理员身份运行”。

  2. 复制下面这一行命令并粘贴进去(按回车):

    PowerShell

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

    image-20260310043130458

    3验证安装:

    安装完成后,关闭当前的 PowerShell 窗口,重新打开一个。输入以下命令:

    PowerShell

    uv --version
    

    如果你看到了类似 uv 0.x.x 的版本号,恭喜你,已经装好了!

    image-20260310043336950

我把基本语法罗列了出来,看不懂就直接跳到下面的实战。

这个是和pip的对比

  • 命令用途对应传统命令
    uv venv在当前目录创建虚拟环境 (.venv)python -m venv .venv
    uv pip install <pkg>安装指定的 Python 包pip install <pkg>
    uv pip freeze列出已安装的包及其版本pip freeze
    uv pip compilepyproject.toml 转为 requirements.txtpip-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)

如果你只想临时运行一个工具(比如 ruffblack),而不想把它安装到全局:

  • uvx <tool> :下载、缓存并运行一个 Python 工具。

    比如:uvx ruff check .

多说无益,我们来实战一下

简单介绍下我的现状:

我之前的默认环境是Anaconda,然后我现在新建了一个项目,我需要用这个UV来帮我去管理环境

以前的流程是,我需要在Anaconda新建一个环境,然后激活这个环境,然后在里面下载我这个需要的包,而且包如果比较大的话,时间会比较长,流程会比较繁琐

我们来看看UV怎么样

打开cmd

image-20260310045430258

uv python find

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

image-20260310045626763

切换到我们的项目路径

image-20260310045740521

然后执行

uv init

image-20260310050024418

这个问题是因为 uv init 默认会把你的当前文件夹名(“图片”)作为 Python 项目的名字。

但在 Python 的规范里,项目/包名不能包含中文字符,只能使用字母、数字、下划线 _ 或连字符 -

我们改完文件名再重新回到CMD

回到我们的项目目录

image-20260310051111191

输入

uv init

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

image-20260310051253208

我们看看它给我们生成了什么

pyproject.toml

readme.md

.gitigore

.python-version

image-20260310051442583我们拆解下:

1. pyproject.toml —— 项目的“大脑”

这是最重要的一个文件。在现代 Python 开发中,它取代了以前乱七八糟的 setup.pyrequirements.txt 和各种工具的配置文件。

  • 干嘛用的:它记录了项目的元数据(名字、版本、作者)以及项目依赖
  • 怎么用:当你运行 uv add pillow 时,uv 会自动把 pillow 写进这个文件里。以后你把项目发给别人,别人只需要运行 uv syncuv 就会根据这个文件里的清单,把所有的包原封不动地装好。

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快不少,

从终端输出里,我们可以看到几个非常关键的信息:

  1. 它借用了 Anacondauv 发现我的电脑里已经有 D:\Anaconda3\python.exe 了,所以它很聪明地直接拿这个版本作为基础来创建环境,没让我再等下载。
  2. 创建了 .venv:它在我的 image 文件夹里建了一个 虚拟环境。
  3. 安装成功pillow==12.1.1 已经下载好了。

image-20260310052300907

如果我们不想要这个版本的Python

可以在之前就用

uv python install 3.11

我这个是已经构建了

所以我需要用这个命令改一下

uv python pin 3.13

image-20260310052824206

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

输入

uv sync

image-20260310053154326

验证一下看现在是什么环境

输入

uv run python --version

没问题,他还自动下载了 pilow

uv run main.py

忘了说了,前面UA还生成了一个main.py

我们运行下

uv run main.py

image-20260310053434683

下面是uv最屌的

他会自动下包,

我们来一起操作一下

用pycharm打开我们的2.2py

开头加上

# /// script
# dependencies = [
#   "numpy",
#   "pillow",
# ]
# /// 

image-20260310053841880

回到cmd

输入

uv run 2.2.py

自动下载了numpy

image-20260310054225587

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

image-20260310054303800

我们把pycharm里面的这个环境,也换成我们刚才uv创建的这个环境

点击我们用的这个环境 ,我这里是D:Anaconda3

再点击 解释器设置

image-20260310054425028

添加本地解释器

image-20260310054450421

因为它用的是venv

直接弹窗让我们用这个环境了

点击 选择现有解释器

image-20260310054733593

我们运行一下

缺numpy

image-20260310055223362

为啥没全自动下好?

uv run 确实全自动下包了,但它为了不把你的项目环境搞乱,把包装进了一个“临时环境”。

模式你的操作它是怎么干活的结果
项目模式 (安家)uv add numpy它把 numpy 写进“说明书”(pyproject.toml),然后装进我们的“项目环境”(.venv)。PyCharm 变绿了,以后谁都能用。
脚本模式 (住酒店)uv run 2.2.py (带注释)它看到注释,认为:“这只是个临时任务,我单独给它下好包跑完就行,别弄脏了主人的特定的.venv。”PyCharm 依然报红,因为它没进项目环境。

我们打开看看,他下载了在临时目录

这样挺高明的,跑代码可以直接用这个临时环境(主环境)

平常项目的时候可以用项目环境

image-20260310055609163

我们回到cmd

输入

uv add numpy

image-20260310055749251

再回到pycharm

执行一下Py

没问题

image-20260310055837787

⚠️ 给 Anaconda 用户的3 个提醒

  1. 路径的区别

    • Anaconda:环境通常存在 C:\Users\Name\anaconda3\envs...
    • uv:环境默认就在你项目文件夹里的 .venv。删掉这个文件夹,环境就没了,非常干净,但你也别误删了。
  2. 如何迁移依赖?

    如果你的项目原本有一个 requirements.txt,你可以运行:

    Bash

    uv add -r requirements.txt
    

    这会把旧包全部搬进 uv 的管理体系里,更方便快捷。

  3. 和uv互不干扰

    你可以同时安装 Anaconda 和 uv。在同一个项目里,你用 python main.py 调用的是 Anaconda 的默认环境,而用 uv run main.py 调用的是 uv 的环境。不过我建议既然用了 uv,就全程使用 uv 命令。

总结一下:为什么从 Anaconda 切换到 uv?

通过实战可以看到,uv 的优势非常明显:

  1. 项目即环境,管理更轻松

    • uv 自动在项目文件夹生成 .venv,不再需要手动创建、激活环境,也不用在 PyCharm 里翻半天找解释器。
    • 项目依赖写在 pyproject.toml,一条命令就能同步环境,团队协作更顺畅。
  2. Python 版本自动化管理

    • 可以直接用 uv python install <version> 下载指定版本,.python-version 锚定项目版本,保证项目在正确的 Python 上运行。
    • 这极大避免了安装多个解释器、手动切换版本的繁琐流程。
  3. 依赖安装更快、更智能

    • uv add <pkg> 将包直接装进 .venv,保持环境干净;
    • uv run <script.py> 可临时运行脚本、自动下包,不污染主环境;
    • 临时环境和项目环境互不干扰,灵活性高。
  4. IDE 对接无压力

    • PyCharm 直接选择 .venv 即可,环境一致性有保证,运行、调试更顺畅。
  5. 平滑迁移和共存

    • 原来的 Anaconda 环境可以保留,同时迁移旧项目依赖非常简单(uv add -r requirements.txt)。
    • 不用担心和旧环境冲突,可以逐步切换到 uv 全流程管理。

如果你是一个像我一样,受够了 Anaconda 臃肿和 Pip 缓慢的开发者,uv 就是那个能让你重新爱上 Python 开发的神器。

感谢看完,如果觉得这篇“技术教程”对你有帮助,随手点个赞、在看、转发三连吧

如果想第一时间看到我的技术教程,也可以给我个星标* *。

~~谢谢你看我的文章,我们,下期再见。