python包管理工具-uv
一、Python传统包管理
1.创建venv虚拟环境
# 创建venv虚拟环境目录
python3 -m venv .venv
# 启用venv虚拟环境
source .venv/bin/activate
2.pip安装依赖包
pip install flask
3.批量安装需要的依赖包
早期管理配置方式
可以将需要安装的软件包查出来记录到文件中,命令指向文件,达到批量安装依赖包的目的,这样我们就可以通过文件记录方式记录当前项目所需要的软件包。
先查看当前环境已经安装了哪些依赖包,命令如下所示:
# 查看当前环境已安装的包
pip list
---------------------
Package Version
------------ -------
blinker 1.9.0
click 8.2.1
Flask 3.1.1
itsdangerous 2.2.0
Jinja2 3.1.6
MarkupSafe 3.0.2
pip 23.0.1
setuptools 65.5.0
Werkzeug 3.1.3
pip list命令无法满足批量安装文件的格式,我们可以通过下面的命令来输出到文件,然后通过文件来安装所需的依赖包,命令如下:
pip freeze > requirements.txt
# 通过文件批量安装依赖包
pip install -r requirements.txt
requirements.txt文件内容:
blinker==1.9.0
click==8.2.1
Flask==3.1.1
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==3.0.2
Werkzeug==3.1.3
早期依赖包管理方式的弊端:
- 缺少分组能力,无法区分 dev、test、docs 等依赖。
- 顺序敏感和冲突多,多个包之间的版本冲突难以处理和锁定。
这里我们可以看出安装的依赖包不只是Flask的包,还有其他的依赖包,一旦我们所需要的依赖包多了之后就会很难进行管理。
最新配置文件管理
requirements.txt是Python项目中最早期也最常用的依赖管理方式,但它存在一些明显的弊端,近年来官方已推荐采用更先进的方式(如 pyproject.toml)。
最新依赖包管理方式的优点:
- 被官方认可为标准项目配置入口(支持 setuptools、poetry、flit、hatch 等)。
- 可以在其中定义项目依赖、开发依赖、可选依赖等,结构清晰。
- 配合 lock 文件(如 poetry.lock)支持精确版本锁定,环境稳定可重复。
pyproject.toml配置文件内容:
[project]
name = "flask-api"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"Flask==3.1.1",
]
通过该配置文件安装依赖包:
pip install -e .
加不加-e参数的区别:不加-e的话打包好的虚拟环境目录会添加一份源码,我们在更新代码的时候,虚拟环境目录的源码不会更新,加上-e了之后会在你的虚拟环境中创建一个指向源代码目录的软链接,而不是复制代码。使得你可以边修改源代码边立即生效,无需重新安装或打包。
二、uv包管理工具
uv管理工具的特点:
- 极速安装:使用
Rust编写,比pip快几十倍,安装依赖速度极快。 - 现代依赖管理:原生支持 pyproject.toml 和 lockfile(即 uv.lock)。
- 内建虚拟环境管理:自动管理
.venv,无需手动创建virtualenv。 - 一致性锁定:支持类似 npm 的 sync 模式,确保团队开发环境一致。
- 安全/可预测性:使用锁文件(uv.lock)锁定包版本,避免版本漂移问题。
安装uv工具
命令安装(Linux|MacOS系统)
curl -Ls https://astral.sh/uv/install.sh | bash
使用pip安装(Python环境)
pip install uv
使用brew安装(MacOS系统)
brew install astral-sh/tap/uv
uv工具的使用
常用uv命令使用
# 初始化项目
uv init
# 添加依赖包
uv add 包名
# 更新lock文件
uv lock
# 安装同步 pyproject.toml 中的依赖
uv sync
# 虚拟环境管理
uv venv
# 运行项目
uv run app.py
uv模拟pip命令使用
uv pip是 uv 包管理工具中用于兼容传统 pip 命令的一组子命令,它模拟pip命令的功能,但具有更快的安装速度和更现代的依赖管理能力。
常用命令如下:
# 依赖包列表
uv pip list
# 以可用格式列出可用的依赖包列表
uv pip freeze
# 安装依赖包
uv pip install
# 卸载依赖包
uv pip uninstall
# 同步依赖包版本
uv pip sync
uv工具其他设置
设置缓存目录
(通过设置环境变量PIP_CACHE_DIR来更改缓存目录)
Linux/macOS:
export PIP_CACHE_DIR=/path/to/your/cache/directory
Windows:
# cmd
set PIP_CACHE_DIR=C:\path\to\your\cache\directory
# powershell
$env:PIP_CACHE_DIR = "C:\path\to\your\cache\directory"
设置国内源
- 阿里云: https://mirrors.aliyun.com/pypi/simple/
- 清华大学: https://pypi.tuna.tsinghua.edu.cn/simple/
- 中国科学技术大学: https://pypi.mirrors.ustc.edu.cn/simple/
临时设置国内源
在使用uv时,可以通过--index-url参数指定国内源。例如:
uv <command> --index-url https://mirrors.aliyun.com/pypi/simple/
全局设置国内源
vim ~/.pip/pip.conf
---------------------------
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
使用uv管理Python项目
1.创建项目目录
mkdir -p flask-api
2.编写main.py源码文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
2.使用uv初始化包
uv init flask-api
3.使用uv添加依赖包或者配置文件安装依赖包
命令添加依赖包
uv add flask
通过配置文件安装
先编辑pyproject.toml配置文件:
[project]
name = "flask-api"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"flask>=3.1.1",
]
运行命令安装
uv sync
安装完成之后的目录结构
tree -a -L 1 flask-api
flask-api
├── .git
│ ├── config
│ ├── description
│ ├── HEAD
│ ├── hooks
│ ├── info
│ ├── objects
│ └── refs
├── .gitignore
├── .python-version
├── .venv
│ ├── .gitignore
│ ├── .lock
│ ├── bin
│ ├── CACHEDIR.TAG
│ ├── lib
│ └── pyvenv.cfg
├── main.py
├── pyproject.toml
├── README.md
└── uv.lock
4.运行项目
uv run app.py
运行成功,信息如下:
* Serving Flask app 'main'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 418-483-503