UV: Python包和项目管理器(从入门到不放弃教程)

目录

  • [UV: Python包和项目管理器(从入门到不放弃教程)](#UV: Python包和项目管理器(从入门到不放弃教程))
    • [1. 为什么用uv,而不是conda或者pip](#1. 为什么用uv,而不是conda或者pip)
    • [2. 安装uv(Windows)](#2. 安装uv(Windows))
      • [2.1 powershell下载](#2.1 powershell下载)
      • [2.2 winget下载](#2.2 winget下载)
      • [2.3 直接下载安装包](#2.3 直接下载安装包)
    • [3. uv教程](#3. uv教程)
      • [3.1 创建虚拟环境 (`uv venv`)](#3.1 创建虚拟环境 (uv venv))
    • [4. uvx](#4. uvx)
    • [5. 此pip非彼pip](#5. 此pip非彼pip)
    • [6. uv没有虚拟环境的列表](#6. uv没有虚拟环境的列表)

UV: Python包和项目管理器(从入门到不放弃教程)

还在用慢吞吞的 pip 和略复杂的 conda 吗?试试 uv!🚀 这款用 Rust 打造的 Python 包管理器,速度快到飞起!⚡️ 集成虚拟环境管理,告别 virtualenv。安装、卸载、锁定依赖,统统快人一步!💨 让你的 Python 开发更流畅、更高效!✨

1. 为什么用uv,而不是conda或者pip

你还在为迟迟进不去conda环境而烦恼吗?你是不是感觉pip安装一些大点的Python包贼拉慢!

对,你不是一个人,是时候做个渣男,放弃旧爱conda/pip,拥抱新欢uv啦!

TL;DR: uv 之所以被开发者考虑用作 condapip 的替代品,主要是因为它号称自己比pip快10-100倍!这你敢信?!高低得安装一下尝尝鲜!

相对于 pip

  • 速度更快: uv 使用 Rust 编写,这使得它在包的安装、依赖解析和虚拟环境创建等方面通常比 pip 快很多倍。尤其是在处理大型项目和复杂的依赖关系时,速度差异更为明显。
  • 集成的环境管理: uv 不仅处理包管理(像 pip 那样),还内置了虚拟环境管理的功能(类似于 virtualenv)。这意味着你不需要单独使用 virtualenv 来创建和管理虚拟环境,uv venv 命令就能完成。
  • 更现代的设计: uv 旨在解决 pip 长期存在的一些性能和用户体验问题,例如依赖冲突处理和错误消息提示。
  • 兼容性: uv 在设计上力求与 pip 的生态系统兼容,这意味着它仍然可以从 PyPI (Python Package Index) 安装包,并且理解 requirements.txt 文件。

相对于 conda

  • 更轻量级和更专注于 Python 包: conda 是一个更通用的包管理器,它可以管理包括 Python、非 Python 的库(如 C/C++ 依赖)以及整个软件栈。uv 目前更专注于 Python 包的管理。如果你主要处理 Python 项目,并且不需要 conda 的非 Python 包管理能力,uv 通常更轻量级。
  • 速度: 在 Python 包的安装和环境创建方面,uv 通常比 conda 更快。conda 的依赖解析有时会比较慢。
  • 更贴近 pip 的工作流程: 对于已经习惯了 pipvirtualenv 工作流程的开发者来说,uv 的某些命令和概念可能更容易理解和接受。
  • 避免 conda 的一些复杂性: conda 的环境管理有时可能比较复杂,尤其是在处理不同频道(channels)和依赖冲突时。uv 的设计目标是更简洁和直接。

2. 安装uv(Windows)

具体安装文档可参考官方文档:https://docs.astral.sh/uv/getting-started/installation/

以下是在Windows系统下的几种安装方式。

2.1 powershell下载

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

2.2 winget下载

bash 复制代码
winget install --id=astral-sh.uv  -e

2.3 直接下载安装包

🤣😂🤣😂 哎哟喂!本该一行命令轻松搞定,谁料卡在了 GitHub 这道墙🧱,😭。看来只能手动"搭梯子"去搬运资源了(🤫🤫🤫 你懂的)。

下载地址:uv-x86_64-pc-windows-msvc.zip

解压后,将解压后的文件夹目录设置环境变量即可生效。

3. uv教程

3.1 创建虚拟环境 (uv venv)

  • 功能: 创建一个新的 Python 虚拟环境。

  • 示例:

    bash 复制代码
    # 在当前目录下创建一个名为 .venv 的虚拟环境,使用系统默认的 Python 版本
    uv venv
    
    # 在当前目录下创建一个名为 my-project-env 的虚拟环境,使用指定的 Python 3.11 版本
    uv venv -p python3.11 my-project-env
    
    # 在指定路径创建一个名为 custom-env 的虚拟环境,使用 Python 3.10
    uv venv -p python3.10 /path/to/my/project/custom-env

3.2. 安装包 (uv pip install)

  • 功能: 在激活的虚拟环境中安装 Python 包。(ps:看到这里的pip老熟悉了,但是,此pip非彼pip,这里是uv本身的安装命令。)

  • 示例:

    bash 复制代码
    # 确保你已经激活了虚拟环境 
    # Windows (CMD): .\venv\Scripts\activate
    # macOS/Linux (Bash/Zsh): source venv/bin/activate
    
    # 安装 requests 包
    uv pip install requests
    
    # 安装指定版本的 Flask 包
    uv pip install Flask==2.2.2
    
    # 从 requirements.txt 文件安装所有依赖
    uv pip install -r requirements.txt
    
    # 安装开发依赖 (通常在 requirements-dev.txt 中)
    uv pip install -r requirements-dev.txt -d dev

3.3. 卸载包 (uv pip uninstall)

  • 功能: 从激活的虚拟环境中卸载指定的 Python 包。

  • 示例:

    bash 复制代码
    # 确保你已经激活了虚拟环境
    
    # 卸载 requests 包
    uv pip uninstall requests
    
    # 卸载多个包
    uv pip uninstall Flask Werkzeug

3.4. 列出已安装的包 (uv pip list)

  • 功能: 显示当前激活的虚拟环境中已安装的包及其版本。

  • 示例:

    bash 复制代码
    # 确保你已经激活了虚拟环境
    uv pip list

3.5. 导出 requirements 文件 (uv pip freeze)

  • 功能: 将当前激活的虚拟环境中已安装的包及其确切版本导出到 requirements.txt 文件中。

  • 示例:

    bash 复制代码
    # 确保你已经激活了虚拟环境
    
    # 导出到默认的 requirements.txt 文件
    uv pip freeze > requirements.txt
    
    # 导出到指定的文件
    uv pip freeze > my_dependencies.txt

3.6. 运行工具 (uv tool run) 或其别名 (uvx)

  • 功能: 运行由 Python 包提供的命令行工具,无需显式安装到当前虚拟环境或全局环境。uv 会自动创建一个临时的隔离环境来运行该工具。

  • 示例:

    bash 复制代码
    # 运行 black 代码格式化工具
    uvx black .
    
    # 运行 flake8 代码检查工具
    uv tool run flake8 my_module.py
    
    # 运行指定版本的 pylint
    uvx [email protected] my_module.py

3.7. 锁定依赖 (uv pip compile)

  • 功能:requirements.in 文件编译生成精确的锁定文件 (requirements.txt),包含所有直接和间接依赖及其确切版本。这有助于实现可复现的构建。

  • 示例:

    bash 复制代码
    # 假设你有一个 requirements.in 文件
    
    # 编译生成 requirements.txt
    uv pip compile requirements.in -o requirements.txt
    
    # 指定输出文件
    uv pip compile input_deps.in -o locked_deps.txt

3.8. 同步依赖 (uv pip sync)

  • 功能: 根据锁定的 requirements.txt 文件同步当前虚拟环境中的依赖。如果虚拟环境中的包与锁定文件不一致,uv 会安装、升级或卸载包以使其与锁定文件匹配。

  • 示例:

    bash 复制代码
    # 确保你已经激活了虚拟环境,并且有一个 requirements.txt 文件
    
    # 根据 requirements.txt 同步虚拟环境
    uv pip sync requirements.txt
    
    # 同步指定的锁定文件
    uv pip sync locked_dependencies.txt

3.9. 移除虚拟环境 (uv venv --remove)

  • 功能: 删除指定的虚拟环境。

  • 示例:

    bash 复制代码
    # 删除当前目录下的名为 .venv 的虚拟环境
    uv venv --remove .venv
    
    # 删除指定路径的虚拟环境
    uv venv --remove /path/to/my/project/my-project-env

这些操作涵盖了使用 uv 进行 Python 项目开发和依赖管理的常见需求。记住在使用 uv pip install, uv pip uninstall, uv pip list, uv pip freeze, uv pip sync 等命令时,通常需要在你的虚拟环境被激活的状态下进行操作,以确保这些操作影响的是你的项目环境而不是全局环境。

4. uvx

当你在安装uv的时候,同时也会安装uvxuvx是一个无需安装即可运行 Python 工具的命令, uvx 专门用于调用由 Python 包提供的命令行工具,而无需将这些工具显式安装到项目的虚拟环境或全局环境中。

  • uv tool run 的别名: uvx 命令是 uv tool run 的直接别名。这两个命令完全等效。
  • 在临时的、隔离的环境中安装工具: 当你使用 uvx <工具> 时,uv会自动创建一个临时的、隔离的虚拟环境,将包含该工具的必要包安装到该环境中,运行该工具,然后通常会丢弃该临时环境(尽管它可能会被缓存以加快后续运行速度)。
  • 类似于 Node.js 中的 npxuvx 的功能与 Node.js 生态系统中的 npx 非常相似,允许你执行工具而无需全局安装它们。

5. 此pip非彼pip

uv 自身就实现了安装 Python 包的功能,它是一个替代 pip 的工具。 当你运行 uv pip install 时,uv 会使用它自己的内部逻辑来下载、解析和安装包,而不会依赖于系统中是否安装了 pip。因此,如果你想使用 uv 来安装包,直接使用 uv pip install <包名> 即可,无需担心是否安装了 pip

  • uv pip installuv 提供的安装包的命令。
  • uv 自身包含了安装包的逻辑,不需要依赖 于传统的pip
  • 即使你的系统中没有安装 pip,你也可以直接使用 uv pip install 来安装包。

6. uv没有虚拟环境的列表

用过conda的人都熟悉conda env list来查看已经安装的虚拟环境有哪些。但是uv没有哦。

相关推荐
神奇侠20246 分钟前
基于PaddleOCR对图片中的excel进行识别并转换成word(一)
python·word·excel·paddleocr
bigear_码农12 分钟前
python异步协程async调用过程图解
开发语言·python·线程·进程·协程
知识分享小能手1 小时前
JavaScript学习教程,从入门到精通,Ajax与Node.js Web服务器开发全面指南(24)
开发语言·前端·javascript·学习·ajax·node.js·html5
annus mirabilis1 小时前
PyTorch 入门指南:从核心概念到基础实战
人工智能·pytorch·python
凌叁儿1 小时前
Python 的 datetime 模块使用详解
开发语言·python
谁家有个大人1 小时前
Python数据清洗笔记(上)
开发语言·笔记·python·数据分析
belldeep1 小时前
python:mido 提取 midi文件中某一音轨的音乐数据
python·track·mido
铭阳(●´∇`●)2 小时前
Python内置函数---breakpoint()
笔记·python·学习
zhanghongyi_cpp2 小时前
python基础语法测试
python