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

开篇先简单对比一下两者

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

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

    arduino 复制代码
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    3验证安装:

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

    PowerShell

    css 复制代码
    uv --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)

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

  • 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

readme.md

.gitigore

.python-version

我们拆解下:

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 已经下载好了。

如果我们不想要这个版本的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 个提醒

  1. 路径的区别

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

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

    Bash

    csharp 复制代码
    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 开发的神器。

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

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

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

相关推荐
dev派2 小时前
AI Agent 系统中的常用 Workflow 模式(1)
python·langchain
明月_清风4 小时前
从“能用”到“专业”:构建生产级装饰器与三层逻辑拆解
后端·python
曲幽13 小时前
数据库实战:FastAPI + SQLAlchemy 2.0 + Alembic 从零搭建,踩坑实录
python·fastapi·web·sqlalchemy·db·asyncio·alembic
用户83562907805118 小时前
Python 实现 PowerPoint 形状动画设置
后端·python
ponponon19 小时前
时代的眼泪,nameko 和 eventlet 停止维护后的项目自救,升级和替代之路
python
Flittly19 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(5)Skills (技能加载)
python·agent
敏编程19 小时前
一天一个Python库:pyarrow - 大规模数据处理的利器
python
Flittly21 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(4)Subagents (子智能体)
python·agent
明月_清风1 天前
Python 装饰器前传:如果不懂“闭包”,你只是在复刻代码
后端·python