同名包在虚拟环境、源码目录和系统环境里混在一起时,光看 pip list 不一定够。可以直接看当前解释器会找到哪份模块:
python -c "import sys, importlib.util; name='requests'; spec=importlib.util.find_spec(name); print(sys.executable); print(spec.origin if spec else 'not found')"
环境:Python 3.x;把 requests 换成要排查的模块名。它不会执行目标模块代码,找不到时会打印 not found。如果路径指向项目目录或意外的系统目录,再检查当前 python 是否来自预期的虚拟环境。