python包管理工具-uv

TOC

一、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"

设置国内源

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