uv包管理

包管理是Python开发中的核心环节。uv提供了极速的包管理功能,支持安装、升级、卸载、查询等各种操作。本章将详细介绍如何使用uv高效地管理Python包。

包管理基础概念

Python包是包含模块、函数、类和数据的可重用代码集合。使用uv进行包管理的优势包括:

  • 极速安装:并行下载和安装,速度比传统工具快10-100倍
  • 智能解析:先进的依赖解析算法,避免冲突
  • 缓存优化:智能缓存机制,减少重复下载
  • 安全可靠:内置哈希校验,防止恶意包

安装包

1. 基本安装命令

bash
# 安装单个包
uv pip install requests

# 安装多个包
uv pip install requests flask numpy pandas

# 安装特定版本的包
uv pip install django==4.2.0
uv pip install "django>=4.0,<5.0"

# 从PyPI安装最新版本
uv pip install --upgrade requests

2. 从不同源安装

bash
# 从requirements.txt安装
uv pip install -r requirements.txt

# 从constraints.txt安装(约束条件)
uv pip install -c constraints.txt requests

# 从本地文件安装
uv pip install ./package.tar.gz
uv pip install ./package.whl

# 从Git仓库安装
uv pip install git+https://github.com/user/repo.git
uv pip install git+https://github.com/user/repo.git@v1.0.0

# 从本地目录安装(开发模式)
uv pip install -e ./my-package

3. 高级安装选项

bash
# 强制重新安装
uv pip install --force-reinstall requests

# 只安装而不依赖解析
uv pip install --no-deps requests

# 不使用缓存
uv pip install --no-cache-dir requests

# 指定索引URL
uv pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ requests

# 使用额外索引URL
uv pip install --extra-index-url https://pypi.org/simple/ requests

# 指定目标目录
uv pip install --target ./libs requests

升级包

1. 基本升级命令

bash
# 升级单个包
uv pip install --upgrade requests

# 升级多个包
uv pip install --upgrade requests flask numpy

# 升级所有过时的包
uv pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 uv pip install -U

# 强制升级(即使已是最新版本)
uv pip install --upgrade --force-reinstall requests

2. 升级策略

bash
# 默认升级策略(只升级需要升级的依赖)
uv pip install --upgrade --upgrade-strategy only-if-needed requests

# 升级所有依赖
uv pip install --upgrade --upgrade-strategy eager requests

# 不升级依赖
uv pip install --upgrade --no-deps requests

卸载包

1. 基本卸载命令

bash
# 卸载单个包
uv pip uninstall requests

# 卸载多个包
uv pip uninstall requests flask numpy

# 确认卸载(无需交互)
uv pip uninstall requests --yes

# 不删除依赖包
uv pip uninstall --no-deps requests

2. 批量卸载

bash
# 从requirements.txt卸载
uv pip uninstall -r requirements.txt

# 卸载所有包(保留pip和setuptools)
uv pip freeze | xargs uv pip uninstall -y

# 卸载除指定包外的所有包
uv pip freeze | grep -v "requests\|flask" | xargs uv pip uninstall -y

查询和管理已安装的包

1. 列出已安装的包

bash
# 列出所有已安装的包
uv pip list

# 以表格格式显示
uv pip list --format=columns

# 以冻结格式显示(适合requirements.txt)
uv pip list --format=freeze

# 以JSON格式显示
uv pip list --format=json

# 以树形结构显示依赖关系
uv pip list --format=tree

# 只显示过时的包
uv pip list --outdated

# 显示编辑模式安装的包
uv pip list --editable

2. 显示包详细信息

bash
# 显示包的详细信息
uv pip show requests

# 显示包的依赖关系
uv pip show --verbose requests

# 显示多个包的信息
uv pip show requests flask numpy

3. 检查包依赖

bash
# 检查包的依赖关系
uv pip check

# 检查特定包的依赖
uv pip check requests

包管理高级功能

1. 依赖解析和冲突处理

bash
# 强制重新解析依赖
uv pip install --reinstall --no-deps requests
uv pip install --force-reinstall requests

# 忽略已安装的包
uv pip install --ignore-installed requests

# 不构建源码分发包
uv pip install --only-binary=:all: requests

# 允许外部和不安全的包
uv pip install --trusted-host pypi.org requests

2. 缓存管理

bash
# 查看缓存信息
uv cache dir

# 清理缓存
uv cache clean

# 清理特定包的缓存
uv cache clean requests

# 清理所有缓存
uv cache prune

3. 索引和镜像配置

bash
# 使用国内镜像源
uv pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests

# 配置多个索引源
uv pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple/ \
               --extra-index-url https://pypi.org/simple/ requests

# 使用find-links
uv pip install --find-links /path/to/packages requests

requirements.txt管理

1. 生成requirements.txt

bash
# 生成当前环境的requirements.txt
uv pip freeze > requirements.txt

# 生成带注释的requirements.txt
uv pip freeze --all > requirements.txt

# 生成不带版本号的requirements.txt
uv pip list --format=freeze | sed 's/==.*//' > requirements.txt

2. 从requirements.txt安装

bash
# 从requirements.txt安装所有包
uv pip install -r requirements.txt

# 从多个requirements文件安装
uv pip install -r requirements.txt -r requirements-dev.txt

# 从requirements.txt安装并升级
uv pip install -r requirements.txt --upgrade

# 从requirements.txt安装但不升级
uv pip install -r requirements.txt --no-upgrade

3. requirements.txt高级用法

text
# requirements.txt示例
# 基本包
requests>=2.25.0
flask==2.0.1

# 从Git安装
git+https://github.com/user/repo.git@v1.0.0#egg=package-name

# 从本地文件安装
./local-package.tar.gz

# 包含其他requirements文件
-r requirements-base.txt

# 可选依赖
django[argon2]==4.2.0

# 注释
# 这是注释
numpy  # 这也是注释

包管理最佳实践

1. 版本锁定策略

bash
# 开发环境:使用宽松版本约束
requests>=2.25.0,<3.0.0

# 生产环境:使用精确版本锁定
requests==2.28.1

# 使用pip-tools生成精确锁定文件
uv pip compile requirements.in > requirements.txt

2. 分离开发和生产依赖

text
# requirements.txt (生产依赖)
flask==2.0.1
requests==2.25.1

# requirements-dev.txt (开发依赖)
-r requirements.txt
pytest==6.2.4
black==21.7b0
flake8==3.9.2

3. 安全最佳实践

bash
# 验证包的哈希值
uv pip install --require-hashes -r requirements.txt

# 检查安全漏洞
uv pip audit

# 使用可信索引源
uv pip install --trusted-host pypi.org requests

包管理故障排除

1. 常见问题及解决方案

bash
# 依赖冲突
uv pip install --force-reinstall package_name

# 下载失败
uv pip install --retries 5 --timeout 30 package_name

# 构建失败
uv pip install --no-build-isolation package_name

# 权限问题
uv pip install --user package_name

# 网络问题
uv pip install --index-url https://pypi.douban.com/simple/ package_name

2. 调试和诊断命令

bash
# 显示详细的安装过程
uv pip install --verbose requests

# 显示调试信息
uv pip install --debug requests

# 不实际安装,只解析依赖
uv pip install --dry-run requests

# 显示安装计划
uv pip install --report - requests