引言

  • 入职一个月,感受到科研与工程界的巨大差异,做科研时写的屎山⛰️代码主打一个能跑起来就行,写一大堆脚本,把算法实现了就行。
  • 而到了工业界,新的集群、新的项目、新的模式,感觉自己还有很多需要学习!
  • 今天就从现代的Python包管理器uv开始,规范自己的代码,树立软件工程的思想,重拾本科死去的前端、后端、数据库、计算机网络…

预备知识

1. venv

  • venv 是 Python 自带 的一个虚拟环境管理工具,用于创建一套独立的 Python 解释器及其包管理环境。
  • 简单用法:
    • python -m venv .venv会在当前目录下创建一个.venv的文件夹,里面包含里面包含独立的 Python 解释器和 pip
    • 使用source .venv/bin/activate可以激活并使用当前环境
    • 使用pip install在当前环境下安装包

2. pyproject.toml

  • pyproject.tomlPython 官方推荐 的项目配置文件格式,它的作用是:统一管理项目的构建配置、依赖信息和元数据
  • pyproject.toml中定义了项目名称、版本、作者、项目依赖(类似 requirements.txt,但更标准)等
  • pyproject.toml示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [project]
    name = "my-awesome-project"
    version = "0.1.0"
    description = "这是一个示例项目"
    authors = [{ name = "Tianle", email = "[email protected]" }]
    dependencies = [
    "pydantic_ai>=0.2.0",
    "requests"
    ]

    [build-system]
    requires = ["uv"]
    build-backend = "uv.build"

uv介绍

uv是对pip和venv的高级封装,有了uv,就可以自动化地管理Python版本、项目依赖、虚拟环境和python项目的打包


基本用法

uv的安装

1
2
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或 pip install uv

📌 python版本管理

  • 列出uv支持安装的 Python 版本

    1
    uv python list
  • 安装 Python

    1
    2
    # uv python install <实现名><版本号>
    uv python install cpython3.12 # CPython 是最常用、最主流的 Python 实现
  • 使用特定版本运行脚本

    1
    uv run -p 3.12 xxx.py
  • 进入一个基于 Python 3.12 的 REPL(交互式解释器)

    1
    uv run -p 3.12 python

🛠️ 项目与依赖管理

  • 初始化项目

    1
    uv init
  • 添加依赖包:添加 flask 到当前项目中,自动写入 pyproject.toml 并安装依赖。

    1
    uv add flask
  • 移除依赖

    1
    uv remove flask
  • 查看依赖树

    1
    uv tree
  • 构建当前 Python 项目的whl包

    1
    uv build
  • 安装工具(工具不同于项目依赖,是全局可以调用的命令,它不会写入 pyproject.toml 的依赖里)

    1
    uv tool install ruff
  • 拿到别人的项目后自动搭建环境并安装依赖

    1
    uv sync
  • 在虚拟环境的上下文中运行程序,运行完后会自动退出

    1
    uv run main.py
  • 在自己调试项目时,可以使用可编辑模式安装依赖,这样你在源代码里做改动,代码立刻生效,无需重新安装

    1
    pip install -e . # -e表示使用可编辑模式(editable mode)安装

uv对比conda

  • ⚖️ 功能对比

    功能 uv conda
    包管理 ✅ Python 包(基于 pyproject.toml ✅ Python 包 + C/C++ 库
    Python 版本管理 ✅(带版本下载与切换) ✅(环境中内置不同版本)
    创建虚拟环境 ✅ 自动创建 ✅ 使用 conda create
    环境隔离 ✅ 支持 ✅ 支持
    非 Python 库支持(如 libxml, OpenCV) ❌ 不支持 ✅ 支持
    依赖安装速度 🚀 极快(用 Rust 写) 较快,但依赖解析慢一些
    是否标准工具 ✅ 标准 PEP 支持(pyproject.toml) ❌ 非官方格式,生态封闭
  • 🎯 使用建议:uv vs conda

    使用场景 推荐工具
    普通 Python 项目,依赖纯 Python 包 ✅ uv
    科研/机器学习项目,需要依赖 C/C++ 编译库 ✅ conda
    追求安装速度、现代生态、标准格式 ✅ uv
    多语言混合项目、包含 R/C/FORTRAN 等 ✅ conda

✅ 推荐:一个项目只使用其中一个工具,不要混用 uv 和 conda。

拓展阅读