一步学会使用uv管理Python项目

前言 作为初学Python的新手,疑惑 pip 每次安装都是全局不同项目间又是如何管理依赖呢?早期使用过conda,后面接触过一些后发现 uv 相对更轻量一些。记录一下初次接触uv的过...

前言

作为初学Python的新手,疑惑 pip 每次安装都是全局不同项目间又是如何管理依赖呢?早期使用过conda,后面接触过一些后发现 uv 相对更轻量一些。记录一下初次接触uv的过程,学习如何管理项目。

基础

Python安装依赖

# 全局安装flask
pip install flask

# 可以通过该命令查看 flask 安装路径
pip show flask 

uv管理依赖

虚拟环境

# 在当前目录下创建虚拟环境
python3 -m venv .venv 

# 激活环境
source .venv/bin/activate 

# 安装依赖将被安装到虚拟环境中
pip3 install flask

image.png 备注📝:venv 原理为修改了python中的 sys.path 变量(数组),将.venv路径填充到变量中,运行时会依次找寻到依赖。

依赖记录

pip freeze

# 将当前依赖记录到 requirements.txt
pip freeze > requirements.txt

# 安装
pip install -r requirements.txt

通过上面命令可以较为方便的将项目依赖记录下来,方便其他成员安装使用。但是会存在一定缺陷,无法分清项目的直接/间接依赖,会将所有的依赖项目都记录下来,这样会出现以下的几种情况:

  • 删除一个依赖后,这个依赖的间接依赖没有被删除,再次安装会有冗余的依赖项
  • 多个依赖共同引用了同一个间接依赖,但是不同依赖之间的版本不同
  • ... 以上几种情况都会导致依赖管理变得脆弱,所以更推荐使用 pyproject.toml 的方式记录依赖

pyproject.toml

image.png pyproject.toml 不光可以管理依赖,还可以管理项目中其他框架的配置信息,大大简化了复杂项目的管理难度。

# 一个简单的项目配置
[project]
name = "uv-base-exp"
version = "0.0.1"
dependencies = [
    'Flask==3.1.2'
]
# 安装依赖 (更新源码后不会自动更新)
pip install .

# 安装依赖 (不复制源代码)推荐
pip install -e .

uv 使用


# 原生配置项目
python -m venv .venv
source .venv/bin/activate
edit pyproject.toml
pip install -e .

# uv
uv add flask # 自动创建.venv、pyproject.toml, 自动将flask添加到toml

# 协作者 uv 同步依赖
uv sync

# 运行项目而无需手动激活环境
uv run main.py

总结

Python 作为脚本语言,在19年时突然火爆流行起来,有很多人使用Python提升工作效率,还有很多课程甚至有中小学生也需要学习它,其中有很多人都不是真的开发者,有时候感觉Python的项目简单且乱糟糟的。 总之,有了uv、conda 支持的项目会更加工程化一些,项目不再是有很多脚本拼凑起来的文件夹。 项目示例代码

参考来源

(从pip到uv:一口气梳理现代Python项目管理全流程!) https://www.youtube.com/watch?v=jd1aRE5pJWc @程序员老王