大模型
一步学会使用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
备注📝:venv 原理为修改了python中的 sys.path 变量(数组),将.venv路径填充到变量中,运行时会依次找寻到依赖。
依赖记录
pip freeze
# 将当前依赖记录到 requirements.txt
pip freeze > requirements.txt
# 安装
pip install -r requirements.txt
通过上面命令可以较为方便的将项目依赖记录下来,方便其他成员安装使用。但是会存在一定缺陷,无法分清项目的直接/间接依赖,会将所有的依赖项目都记录下来,这样会出现以下的几种情况:
- 删除一个依赖后,这个依赖的间接依赖没有被删除,再次安装会有冗余的依赖项
- 多个依赖共同引用了同一个间接依赖,但是不同依赖之间的版本不同
- ...
以上几种情况都会导致依赖管理变得脆弱,所以更推荐使用
pyproject.toml的方式记录依赖
pyproject.toml
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 @程序员老王