关于UV虚拟环境的指南, 你可以按照以下步骤进行操作。告别依赖地狱 uv 全方位实战指南你作为一个工程师, 也许已经在心里把那样的一整套操作动作当成是习以为常的事情去对待了, 这个一整套操作动作里面会包括拿 pyenv 这个工具去把版本号给管理起来, 再去用 venv 这一个东西把那个虚拟的环境给创建出来, 然后接着再用 pip 把这个包给安装成功, 最后再使用 pip 把相关的信息给导出成为 txt 这个格式的文件, 这一套这样的流程走下来呢, 虽然在大家的印象之中是很经典的, 但是实际上它中间存在着非常多零散的、不统一的地方, 而且它的运行的性能上面也会存在着不少明显的瓶颈问题。uv这个东西是出现的, 这就就像当年那个Rust重写系统工具是一样的情况嘛。它不仅仅是速度方面变快了, 比那个pip的速度要快上10倍到100倍的这么一个量级, 更为重要的是的一个事情, 它就是将那个版本的整个管理的工作, 还有项目的管理的工作, 以及依赖项解析的工作, 还有虚拟环整个境的工作, 这些东西全都给它统一在了一个这么单一的工具里面去了。这篇文章会引导你从头开始, 一步一步地学会怎么使用uv这个东西, 并且了解它从生到死整个过程里所有要用到的方法。第一部分安装与环境准备UV不需要系统预装, 它本身是一个独立的二进制文件。1. 安装, 在Linux或者macOS系统。我们这边是强烈推荐大家使用那种官方发布的脚本工具的, 因为它会自己主动去把那个什么环境变量的事情给弄妥当了的。curl -LsSf https://astral.sh/uv/install.sh | sh当安装步骤彻底完工之后, 务必要执行关闭终端应用和重新开启这个操作的流程, 随后在此时输入包含uv和双横线以及验证这两个部分的指令内容用以进行检查和确认。2. 维护命令uv这种工具, 它具备自我管理的强大能力, 所以并不需要去依赖那些系统级别的包管理器来帮忙。uv self update# 1. 清理数据uv cache cleanrm -r $(uv python dir)rm -r $(uv tool dir)# 2. 删除程序rm ~/.cargo/bin/uv ~/.cargo/bin/uvx3. 建议您进行国内镜像源的具体配置设置, 这项操作是我们特别推荐去执行的一项举措。为了确保下载的速度, 咱们建议配置一下 PyPI 镜像。请创建配置文件~/./uv/uv.toml, 这是在 Linux 系统下的情况, 或者是在 macOS 系统下, 创建文件~// /uv/uv.toml, 然后在里面写入:[[index]]url default true第二部所谓的分, 指的是项目开发从头到尾的整个流程)。这是最主要的运用方式。以前的 pip工具仅仅是把软件包放置到运行环境当中去。现在的 uv 引入了项目这个具体的概念, 它依靠 .toml配置文件以及 uv.lock这个锁定文件, 从而非常严格地对那些依赖关系进行控制和管理。1. 初始化项目 (Init)咱们得想一下, 假设是要着手去创建一个名叫>uv init># 列出可用的 Python 版本uv python list# 为当前项目指定Pin特定的 Python 版本uv python pin 3.12这个操作会在项目所在的根目录下面, 去创造一个那个带有后缀是dot加点的文件。同时呢, 那个叫做UV的工具就会自动地去执行一个下载的操作。下载下来之后, 还会直接把对应的那个版本的解释程序给使用上。3. 添加依赖 (Add)安装库, 并且要明确地指定出其版本范围是多少:uv add requests2.30在这一步骤里面, 一共发生出了三件事情。下载并执行安装操作。接下来, 对 .toml 文件进行更新, 这一步的具体内容是写入依赖的声明语句。然后, 生成或者更新 uv.lock 文件, 其作用是锁定当前已经安装的那些软件包的精确版本号。最后一步是, 把开发用的依赖项给添加进去, 这部分内容在专业术语里通常被标记为 Dev 类型的依赖。存在这样一种情况, 即部分工具仅仅在软件开发的阶段里面才需要被使用, 比方说像是测试框架或者代码格式化使用的ruff这样的程序, 但是在最终打包发布到生产环境的那一步中, 就绝对不需要把这些东西给包含进去, 也就是说不需要进行合并操作:uv add --dev pytest ruff5. 点击这个按钮, 就可以去执行一下代码内容。你不需要手动激活虚拟环境如 .venv/bin/。# 直接运行脚本uv 会自动使用环境中的 Pythonuv run main.py# 甚至可以运行带参数的命令uv run pytest tests/6. 查看与分析 (Tree )uv treeuv export --format requirements-txt requirements.txt7. 把那些已经没有必要的、不再使用的依赖项给去掉掉。uv remove requests这个命令会把那个配置文件清理掉, 还会把那个锁定文件也一并清理掉, 这样就保持了整个环境的干净。第三部这一部分的主要工作是围绕团队协作来展开的, 并且需要对整个环境进行同步处理, 同时进行锁定操作。这句话正是应对“它在我的电脑上面能够运行, 可是却不能在对方的电脑上面顺利运行”这一难题的核心所在。场景你拉取了同事的代码当你执行 git clone 这个操作克隆一个包含 uv.lock 这个文件的项目之后, 你只需要去做一件事, 那就是仅仅地去执行一个命令。uv syncuv 会根据 uv.lock 文件下载对应版本的创建虚拟环境并安装所有依赖。它保证了你们的开发环境是字节级一致的。把依赖给升级一把。若是希望将所有包都升级更新, 使之变得符合toml所规定的规则, 并且达到最新的一个版本状态:uv lock --upgradeuv sync第四部分全局工具管理 (Tools)有些 工具主要通过命令行使用如 , , mypy你不希望把它们装在每一个项目里也不希望它们污染系统 。1. 临时性的运行uvx。只是希望只使用这一次, 而不愿意进行安装?# 下载并运行 pycowsay用完即走uvx pycowsay Hello uv!2. 全局安装 (Tool )# 安装 black 代码格式化工具uv tool install black# 安装后你在任何目录下都可以直接运行 blackblack main.pyuv会针对每一个工具单独去建立一个独立的虚拟化操作空间, 这些操作空间之间是完全隔离的。第五部分这个部分, 需要处理缓存的管理工作。uv 会使用全局的内容寻址缓存功能。要是你手上有十个项目, 它们全部都依赖了 numpy 这个库的话, 那么 uv 真的只会在磁盘中存放这一个单独的物理文件而已。uv cache diruv cache pruneuv cache clean总结一张表看懂迁移传统操作uv 操作优势pipuv add自动维护版本锁文件pip req.txt(自动生成 uv.lock)跨平台一致性更强venv/bin/uv run ...不用亲自去动手完成开通的操作, 这样可以让人更加安心省力。pyenv 3.12uv 3.12集成在同一工具中使用pipx来安装black。uv tool black运行的速度变得更快了。
