1、什么是uv,以及uv的显著优势是什么?
uv是一个非常快的Python包和项目管理器,用Rust编写。
- 一个单一的工具,以取代pip, pip-tools, pipx,诗歌,pyenv, twine, virtualenv,等等。
- 比pip快10-100倍。
- 提供全面的项目管理,具有通用的锁文件。
- 运行脚本,支持内联依赖元数据。
- 安装和管理Python版本。
- 运行和安装作为Python包发布的工具。
- 包括一个pip兼容的接口,用于使用熟悉的CLI提高性能。
- 支持可扩展项目的cargo风格工作区。
- 磁盘空间效率高,具有用于依赖性重复数据删除的全局缓存。
- 无需Rust或Python通过curl或pip安装。
- 支持macOS、Linux和Windows操作系统。
使用热缓存安装Trio的依赖项的速度对比。
2. uv的常用命令
- 安装uv
pip install uv
- 升级uv
uv self update
- 卸载uv
uv cache clean
rm -r "$(uv python dir)"
rm -r "$(uv tool dir)"
创建和处理 Python 项目,即使用 .pyproject.toml
uv init:创建新的 Python 项目。
uv add:向项目添加依赖项。
uv remove:从项目中删除依赖项。
uv sync:将项目的依赖项与环境同步。
uv lock:为项目的依赖项创建 lockfile。
uv run:在项目环境中执行命令。
uv tree:查看项目的依赖关系树。
uv build:将项目构建到分发存档中。
uv publish:将项目发布到包索引。
uv tree: 展示安装的包的树状图。
2.1 uv init 创建新项目
uv init beta
cd beta
使用uv init beta 创建一个新项目beta,然后cd 到beta目录底下。uv 将创建以下目录:
.
├── .python-version
├── README.md
├── main.py
└── pyproject.toml
如果你已经在项目里了,想要用uv进行管理项目,直接在项目的根目录下输入下面的代码,uv也会创建上述的目录:
uv init
2.1.1 uv创建的项目结构
项目由几个重要的部分组成,这些部分协同工作并允许 uv 管理您的项目。除了 uv init 创建的文件外,uv 还将创建一个虚拟环境和 uv.lock 文件在项目根目录中。
.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock
uv.lock 是一个跨平台的 lockfile,其中包含有关项目依赖项的确切信息。与用于指定项目的广泛要求的 pyproject.toml 不同,lockfile 包含项目环境中安装的确切解析版本。此文件应签入版本控制中,以便跨计算机进行一致且可重复的安装。uv.lock 是一个可读的 TOML 文件,但由 uv 管理,不应手动编辑。
在每次 uv run 调用之前,uv 将验证 lockfile 是否更新了 pyproject.toml 中的配置,,无需手动干预即可保持项目同步。uv run 可保证您的命令在一致、锁定的环境中运行。或者,您可以使用 uv sync
手动更新环境,然后在执行命令之前将其激活:
uv sync
source .venv/bin/activate
flask run -p 3000
python example.py
2.1.2 pyproject.toml 文件
pyproject.toml 包含有关项目的元数据:
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []
您将使用此文件指定依赖项,以及有关工程的详细信息,例如其描述或许可证。您可以手动编辑此文件,也可以使用 uv add 和 uv remove 从终端管理您的项目,其中add是添加包,remove是删除包,要升级软件包,请运行带有 --upgrade-package 标志的 uv lock:uv lock --upgrade-package requests
。例如使用uv add "tqdm"
uv会自动将tqdm包进行安装,并且将tqdm添加到pyproject.toml文件中:
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = [
"tqdm>=3.4.1"
]
2.2 uv安装Python,创建虚拟环境
我们都知道conda创建虚拟环境的的命令:
-
conda create -n env-name [list of package]
。-n env-name是设置新建环境的名字,list of package是可选项,选择要为该环境安装的包。 -
如果我们没有指定安装python的版本,conda会安装我们最初安装conda时所装的那个版本的python。
-
若创建特定python版本的包环境,需键入
conda create -n env-name python=3.6
uv创建虚拟环境的命令:
uv venv --python 3.8
其中 3.8是虚拟环境所需要的python版本号。输入上面的命令回车后,虚拟环境就创建好了,系统会提示你用下面的代码激活环境:source .venv/bin/activate
小tips:
uv 安装 Python 并允许在版本之间快速切换。uv可以安装多个 Python 版本:
uv python install 3.10 3.11 3.12
也可以根据需要直接下载对应的 Python 版本:
uv venv --python 3.12.0
uv run --python pypy@3.8 -- python
2.3 uv 运行代码
上面我们已经利用uv创建好了运行项目所需的虚拟环境,这时候需要安装一些运行项目所需的包,可以使用上面说的 uv add "包名"
来进行安装。如果pyproject.toml文件中已经有运行项目所需的相关依赖,这时候我们只需要运行uv sync
,他可以自动检索pyproject.toml中写好的依赖并进行安装。
运行代码所需的依赖都安装好之后,可以使用uv run *.py
来运行我们的项目。