使用 Conda 和 uv 实现灵活高效的 Python 环境管理

背景

Python 项目种类繁多,从数据分析、机器学习到 Web 开发和小型工具脚本,每类项目对 Python 版本、环境隔离和依赖管理的需求各异。简单的项目可能仅需 pip 管理依赖,但随着项目规模扩大或复杂度增加,版本冲突和环境膨胀问题逐渐显现。

例如,数据科学项目常依赖庞大的机器学习库(如 TensorFlow 或 PyTorch),需要稳定的环境隔离;而 Web 开发或轻量级脚本项目则更注重轻便、快速的依赖管理和灵活的 Python 版本切换。传统的 conda 虽然功能强大,但其环境体积动辄数 GB,显得过于臃肿。基于此,我优化了环境管理方案,采用 Condauv 组合,取代了原有的 conda-pyenv-poetry 组合,以实现更高效、轻量的 Python 环境管理。

我的目标是:

  • Conda:为数据科学和机器学习项目提供隔离良好的重量级虚拟环境,允许多个相似项目共享环境以节省空间
  • uv:为常规项目提供快速、独立的虚拟环境,并支持灵活的 Python 版本管理和依赖锁定

Conda

Conda 是一个开源的包管理和环境管理系统,最初是为 Python 数据科学项目设计的,但现在已经支持多种编程语言(如 R、Node.js、Java 等)。它由 Anaconda 公司开发,广泛用于数据科学、机器学习和科学计算领域。

  • 虚拟环境隔离Conda 创建完全隔离的虚拟环境,避免依赖冲突,适合管理复杂的科学计算库
  • 依赖自动解析:相比 pipConda 的依赖解析更加强大
  • 多语言支持:不仅限于 Python,还可管理 R、Julia 等语言的依赖

安装与配置

推荐使用 Miniforge,这是针对 conda-forge 频道的轻量级 Conda 发行版,预设以下功能:

  • 默认使用 conda-forge 由社区维护的开源软件仓库,提供了比默认 Conda 渠道更丰富、更新更频繁的包。
  • 提供 mamba,一个更快的 Conda 替代品,加速包解析和安装。

配置优化

# 禁用 base 环境自动激活,避免干扰其他 Python 环境
conda config --set auto_activate_base false

# 验证 Conda 安装:
conda --version
mamba --version

注意:在 Windows 上,确保 Conda 的 PATH 优先级低于 uv 提供的 Python 路径,以避免版本冲突。可以在系统 PATH 中调整顺序,将 uv 的路径置于 Conda 之前。

uv

uv 是一个用 Rust 编写的现代 Python 包管理器,集成了 Python 版本管理、虚拟环境创建和依赖管理的功能,性能远超 PyenvPoetry 等其他工具。其核心优势包括:

  • 🚀 一个工具即可替代 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 及更多。
  • ⚡️ 比 pip 快 10-100 倍
  • 🗂️ 提供全面的项目管理,并配备通用锁文件
  • ❇️ 运行脚本,支持内联依赖元数据
  • 🐍 安装和管理 Python 版本
  • 🛠️ 运行和安装作为 Python 包发布的工具
  • 🔩 包含一个与 pip 兼容的接口,通过熟悉的 CLI 提升性能
  • 🏢 支持 Cargo 风格的工场,适用于可扩展项目
  • 💾 磁盘空间高效,具有全局缓存用于依赖项去重
  • ⏬ 可通过 curl 或 pip 无 Rust 或 Python 进行安装
  • 🖥️ 支持 macOS、Linux 和 Windows

安装与配置

安装 UV

  • 在 Windows 上,使用 PowerShell 安装:

    Invoke-WebRequest -Uri "https://astral.sh/uv/install.ps1" -OutFile "install.ps1"; .\install.ps1
    
  • 在 Ubuntu 或其他 Linux 系统上:

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • 验证安装:

    uv --version
    

配置 UV

  • 设置全局 Python 版本:

    uv python install 3.11  # 安装 Python 3.11
    uv python pin 3.11      # 设置全局默认版本
    
  • 为项目指定 Python 版本:

    cd my-project
    uv python pin 3.10      # 项目使用 Python 3.10
    

    这会在项目目录下生成 .python-version 文件,记录版本设置。

  • 创建虚拟环境并管理依赖:

    uv venv                    # 创建虚拟环境
    uv add numpy pandas        # 添加依赖
    uv sync                    # 同步依赖到虚拟环境
    

    依赖信息记录在 pyproject.tomluv.lock 中,确保一致性。

  • 验证项目环境:

    uv run python -c "import sys; print(sys.executable)"
    

    输出应为项目虚拟环境的 Python 路径,例如 .../my-project/.venv/Scripts/python.exe(Windows)。

  • 使用 UV 打包项目并发布到 PyPI:

    uv build
    uv publish
    
  • 自定义 uv 配置(uv.toml),例如设置自定义缓存目录或配置 pip 索引 URL,创建一个 uv.toml 文件。此文件可以放在全局位置(例如 Linux/Mac 上的~/.config/uv/uv.toml 或 Windows 上的%APPDATA%\uv\uv.toml),或放在项目目录中以进行项目特定的设置。

    cache-dir = "/Volumes/Work/Temporary/uv_cache"
    
    [[index]]
    url = "https://pypi.tuna.tsinghua.edu.cn/simple"
    default = true
    



    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • 部署用于学术研究的 Linux 服务器
  • Python 项目中高效管理路径的范式
  • macOS 系统配置记录
  • Windows 系统配置记录
  • 低性能云服务器实用配置记录