CheatSheet
- —-安装Python
- uv python install: Install Python versions.
- uv python list: View available Python versions.
- —-单个脚本
- uv run: Run a script.
- uv add –script: Add a dependency to a script.
- uv remove –script: Remove a dependency from a script.
- —-项目
- uv init: Create a new Python project.
- uv add: Add a dependency to the project.
- uv remove: Remove a dependency from the project.
- uv sync: Sync the project’s dependencies with the environment.
- uv lock: Create a lockfile for the project’s dependencies.
- uv run: Run a command in the project environment.
- uv tree: View the dependency tree for the project.
- uv build: Build the project into distribution archives.
- uv publish: Publish the project to a package index.
Python项目依赖管理工具
又一种Python项目依赖管理工具
Python有很多功能强大的package,避免了我们重复造轮子。Python有很多中依赖的管理工具,比如使用pip install <package name>
这种方式安装我们所需的第三方package。但是,这种方式安装的package会默认安装到Python的site-packages目录下。机器上所有的Python项目都会共享这个目录下的package。这样就可能出现一个问题:如果两个项目依赖同一个package的不同版本,就会导致项目运行出错。而且site-packages会越来越臃肿,会导致各种不易察觉的问题。
为了解决这个问题,Python引入了虚拟环境的概念。虚拟环境可以理解为一个独立的Python环境,它有自己的site-packages目录,可以用来安装和运行独立的package。
过去,我们需要手动创建并且管理这个虚拟环境。uv
是一个依赖管理器,它的底层还是虚拟环境,但是它提供了一些更简单直观的方法,让我们不用自己管理.venv
了。
0.安装uv
对于MacOS,可以用brew进行安装
brew install uv
1.在单文件Python脚本中使用uv
1.0.运行单个Python文件
uv run main.py
Python经常被用来当作脚本语言,一个简单的.py
文件就能执行一项工作。
1.1.运行时指定依赖
# main.py
import sys
import requests # 假设这个脚本需要使用requests这个库
print(sys.version)
print("Hello, World")
过去,对于这样有依赖的单文件项目,我也是建立一个项目,然后用requirements.txt
管理它的依赖,有点杀鸡用牛刀了。uv对于这个场景有几种不同的方式可供我们选择。
使用--with
参数添加依赖,如果需要多个依赖,就用多个--with
uv run --with requests main.py
uv run --with requests --with flask main.py
如果依赖的项目比较多,这种方法就不是很方便。
1.2.在文件中定义依赖
先用init --script
初始化,效果是会在文件头部添加script
uv init --script main.py
# /// script
# requires-python = ">=3.13"
# dependencies = []
# ///
然后我们可以添加依赖
uv add --script main.py 'requests<3' 'rich'
生成的python就会添加dependencies。
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "requests<3",
# "rich",
#]
# ///
我们也可以直接编辑python文件头部的script,增加或者删除依赖,效果是一样的。
1.3.使用shebang创建可运行文件
为了执行的时候不用输 uv run --script main.py
,可以在文件最上面加上一行shebang。
#!/usr/bin/env -S uv run --script
#
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "requests<3",
# "rich",
#]
# ///
import sys
import requests # 假设这个脚本需要使用requests这个库
print(sys.version)
print("Hello, World")
这样我们给文件运行权限后,将可以直接运行了
chmod +x main.py
./main.py
2.在项目中使用uv
2.0.创建项目
uv init hello-world
# 在项目的根目录中
uv init
生成的文件有
.
├── .venv
│ ├── bin
│ ├── lib
│ └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock
其中,与依赖管理相关的文件是pyproject.toml
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []
2.1.管理依赖
uv add requests
uv add 'requests==2.31.0
uv add git+https://github.com/psf/requests
# 迁移自requirements.txt
uv add -r requirements.txt -c constraints.txt
# 删除
uv remove requests
# 更新版本
uv lock --upgrade-package requests
2.2.依赖同步
uv sync
会同步.venv 和pyproject.toml。uv lock
会生产 uv.lock文件
uv run
会自动调用sync,sync时会自动调用lock,所以一般我们不需要手动去sync或者lock,除非我们改变了依赖,但是没有run,又需要提交commit