pip uninstall 不会删干净,仅删除 site-packages 中的包目录、dist-info 元数据和 record 文件;残留包括 pip 缓存、--user 安装的文件、~/.local/bin 中的可执行脚本、shell 补全配置及 .pth 文件,需手动清理。

pip uninstall 命令本身不会删干净,残留文件必须手动处理。 它只卸载包的代码和元数据,但不清理缓存、用户配置、shell补全脚本、命令行别名或虚拟环境里遗留的.pth文件。尤其在多版本共存、--user安装、或用过pyenv/conda时,残留更顽固。
pip uninstall 后为什么还有文件?
因为 pip uninstall 只做三件事:删除 site-packages 下的包目录、移除 dist-info 元数据、更新 RECORD 文件。它完全不管:
-
pip cache里还存着该包的 wheel 或 sdist 文件 - 如果用过
pip install --user,~/.local/lib/python*/site-packages/下可能有残留 - 某些包(如
black、pre-commit)会把可执行脚本写进~/.local/bin/,卸载后不自动删 - 部分包注册了 shell 补全(如
awscli的complete -F _aws aws),靠 pip 无法清除
查清包到底装在哪、用了哪些路径
先确认真实安装位置和关联路径,避免误删系统包:
- 运行
pip show <package_name></package_name>,看Location和Files字段 - 检查是否是用户级安装:
pip list --user;如果是,重点看%LOCALAPPDATA%\pip\Cache(Windows)或~/.cache/pip(macOS/Linux) - 找可执行文件:
which <package_cmd></package_cmd>(Linux/macOS)或where <package_cmd></package_cmd>(Windows),比如where black - 查看是否注册了 shell 补全:
echo $PATH | grep local或检查~/.bashrc/~/.zshrc里有没有source行
手动清理四类残留路径
按优先级顺序清理,每步都建议先 ls 或 dir 确认内容再删:
-
缓存文件:运行
pip cache purge;若要更彻底,直接删整个缓存目录:%LocalAppData%\pip\Cache(Win)、~/Library/Caches/pip(macOS)、~/.cache/pip(Linux) -
用户级 site-packages:删
~/.local/lib/python*/site-packages/<package_name>*</package_name>和对应dist-info目录(注意通配符*) -
用户级 bin 脚本:删
~/.local/bin/<package_cmd>*</package_cmd>(如black、blackd、pre-commit) - 虚拟环境残留:如果是在 venv 里装的,且该环境已废弃,直接删整个 env 目录比逐个清理更可靠
容易被忽略的关键点
最常漏掉的是 .pth 文件和 shell 初始化片段。有些包(如 virtualenv、setuptools)会在 site-packages 里放 .pth 文件,它们不随 uninstall 删除,却仍影响 import 路径;而像 pyenv 或 conda 管理的环境,其 activate 脚本里可能硬编码了已卸载包的路径——这些都不会报错,但会让后续调试变得极其隐蔽。











