uv不内置检测未用包功能,需结合pip-autoremove删未声明包、vulture分析真实import、或uv sync重建环境来清理冗余依赖。

清理Python项目中uv管理的无用依赖包,避免环境臃肿、构建缓慢或版本冲突,需要区分“未被任何pyproject.toml或requirements.txt声明但实际被import的包”和“完全未使用的孤立包”。uv本身不内置自动检测未使用包的功能,必须结合其他工具或手动验证。
确认当前项目依赖声明来源
uv只认pyproject.toml中的[project.dependencies]、[tool.uv.sources]或requirements.txt(若显式指定)。它不会扫描代码里的import语句。因此第一步必须明确:你期望保留哪些包?它们是否都出现在声明文件里?
打开终端,进入项目根目录,运行:uv pip list,观察输出中哪些包不在pyproject.toml的[project.dependencies]列表里——这些就是候选清理对象。
用pip-autoremove快速删掉未声明的包
方法一:安装并调用pip-autoremove(适用于已用uv同步过pip环境的场景)
运行uv pip install pip-autoremove,这会把工具装进当前uv环境。
执行pip-autoremove,它会自动列出所有未在pip freeze输出中被依赖链直接引用的包——注意:uv环境下pip freeze结果与uv pip list基本一致,但解析逻辑不同。
【关键前提】必须确保当前shell激活的是uv创建/管理的虚拟环境,否则pip-autoremove操作的是系统pip,可能误删全局包。
按提示输入y确认删除,工具将逐个卸载并清除缓存残留。
用vulture静态分析代码真实import情况
方法二:识别“声明了但实际没用到”的包(反向清理)
先安装:uv pip install vulture。
运行vulture . --min-confidence 80,扫描当前目录下所有.py文件,找出未被调用的导入语句。输出类似main.py:3: unused import 'os' (60% confidence)。
检查结果里是否包含你怀疑冗余的包名,比如import requests但整个项目根本没调用requests.get或任何其子模块——这时才能确定requests是真无用。
确认后,在pyproject.toml中手动删掉对应行,再执行uv sync --reinstall,uv会自动卸载该包及其传递依赖。
彻底清空并重建依赖环境
步骤一:备份当前依赖声明
运行uv export -r requirements.txt --no-hashes > requirements-backup.txt,生成不含哈希的纯依赖快照。
步骤二:移除现有环境
执行uv python uninstall $(uv python list --installed | grep "^\*" | cut -d' ' -f2),这条命令会卸载所有uv管理的已安装Python解释器——注意:这不会删项目目录,只清解释器注册表。
步骤三:重新同步声明的依赖
回到项目根目录,运行uv sync。uv会根据pyproject.toml重新下载、编译、安装且仅安装声明列表内的包,所有历史残留包彻底消失。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











