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