为什么需要 uv
什么是虚拟环境?
由于 python 语言是多版本并行发展的, 所以就带来了 python 版本的问题: 比如我有多个项目, 同时依赖了一个库 requests, 我需要安装不同版本的 requests, 我该如何在两个项目中正确的都安装好, 并且运行呢?
这就需要用到虚拟环境: 可以为不同的项目创建独立的虚拟环境, 多个项目之间互不干扰
类似的工具有很多, 如: virtualenv venv 等等, 但是强烈推荐 uv, Rust编写的功能丰富且速度奇快无比
多个 python 版本共存的问题
如果需要开发一个工具库并且兼容多个python版本, 那么就需要安装多个 python 版本, 手动一个个安装太麻烦
安装 uv
https://docs.astral.sh/uv/getting-started/installation/
sh
# for macos
brew install uv使用 uv 管理一切
创建项目 & 管理依赖
为什么不是直接 main.py 就是干? python 的代码组织方式比较灵活, 或者说随意, 不如 rust 项目(cargo create xxx) 代码组织的规范严格, 但可以用 uv 创建比较规范的项目结构
sh
# 创建项目
uv init demo1
# 会自动生成以下文件:
# .git # git 文件
# .gitignore # git 忽略文件
# .python-version # 当前项目使用的 python 版本控制
# README.md # README
# main.py # 入口文件
# pyproject.toml # 类似 package.json 保存依赖和项目描述等信息
uv add requests
# 会自动更新 pyproject.toml, 也就是说, 别人拿到这个文件即可用
# uv 安装所有依赖, 不再需要手动的 pip freeze > requirements.txt 了
# 运行脚本
uv run ./main.py
uv run --python python3.11 ./main.py管理 python 版本
sh
# 查看可用的 python 版本
uv python list
# 安装需要的 python 版本, 可以很方便的安装多个
uv python install cpython-3.12
uv python install cpython-3.11
# 安装后会自动将 python3.12 添加到 PATH 中
python3.12 --version
# 默认情况下需要指定版本才能运行, 如: python3.12
# 安装默认的 python 命令和 python3 命令
uv python install --default
python --version
python3 --version管理虚拟环境
sh
# 创建 .venv 环境: 将以就叫这个, ide 会识别这个名字的目录
python -m venv .venv
# 使用 uv 后, 甚至不需要这一步操作, 你自需要安装一个依赖
# 它就会自动的去检测, 是否有 .venv 如果没有会自动创建一个
uv add requests