pip uninstall 后模块残留因 site-packages 中遗留文件夹、.dist-info 目录及~开头临时文件,需手动清理并清缓存;six==1.16.0 兼容 python 2.7–3.11 且保留关键符号,推荐首行写入 requirements.txt 并强制重装。

pip uninstall 之后为什么模块还在?
单纯 pip uninstall 无法清除残留,因为 Python 的 site-packages 目录下可能还留着未被卸载干净的文件夹、.dist-info 元数据、甚至以 ~ 开头的废弃安装痕迹。这些残留会干扰后续安装,导致 import 时加载到错误版本或半成品模块。
实操建议:
- 执行
pip uninstall 包名后,手动进入site-packages目录(可用python -c "import site; print(site.getsitepackages())"查路径),删除所有与该包相关的文件夹和*.dist-info目录 - 检查是否存在
~开头的临时目录(如~six-1.12.0.dist-info),一并删掉 - 运行
pip cache purge清空下载缓存,避免 pip 从本地缓存中复用旧 wheel
为什么 six==1.16.0 是个安全选择?
不是最新版,也不是最老版,six==1.16.0 是一个广泛兼容的“交集版本”:它支持 Python 2.7 到 3.11,保留了 six.PY2、six.string_types、six.moves.urllib.parse 等老项目依赖的关键符号,又避开了 1.17+ 中彻底移除这些属性带来的崩溃风险。
实操建议:
- 在虚拟环境创建后**立刻**执行:
pip install --force-reinstall --no-deps six==1.16.0 - 把
six==1.16.0放在requirements.txt**第一行**,防止其他包先装进不兼容版本 - 避免用
pip install --user,它会污染全局site-packages,让虚拟环境隔离失效
如何确认 runtime 真正加载的是哪个 six?
pip list 只显示已安装列表,不代表实际 import 的是哪一个。import six; print(six.__file__) 才能定位真实路径,而 print(six.__version__) 能验证是否真被替换成功。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
常见干扰源:
- 项目根目录下存在名为
six.py的本地文件,会被优先 import -
PYTHONPATH或.pth文件偷偷注入了另一个six路径 - conda 和 pip 混用:conda 环境下用 pip 安装可能绕过 conda 的依赖解析,造成多版本共存
遇到 ImportError: cannot import name 'urlparse' 怎么办?
这是典型的 six 版本跳跃引发的符号迁移问题。在 six 中,<code>urlparse 在 six.moves.urllib.parse 下;1.12+ 移到了 six.moves.urllib.parse 的子模块层级,但部分老包仍硬编码引用旧路径。
短期兜底方案(仅限紧急修复):
- 在项目入口文件(如
main.py)最开头插入:
import six
if not hasattr(six.moves.urllib, 'parse'):
import urllib.parse
six.moves.urllib.parse = urllib.parse
注意:这不是长期解法,应尽快升级或 fork 有问题的依赖包。
真正麻烦的从来不是报错信息本身,而是多个包对同一依赖提出互相矛盾的版本要求——这种冲突不会直接报错,而是在某次看似无关的 pip install 后悄然埋下,等你上线才爆发。所以别等崩溃了再处理,每次新建虚拟环境,第一件事就是锁死 six 和清理残留。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










