|
我的法解venv环境里躺着二十多个库,pip list 显示一切正常。析导可当我写下 import requests,入库解释器直接甩我一脸ModuleNotFoundError。法解这感觉就像你明明把钥匙放进了口袋,析导伸手一摸,入库空空如也。法解更气人的析导是,问题往往出在最不起眼的入库地方——你根本没在正确的环境里跑代码。 多数时候,法解这是析导虚拟环境没激活。Windows上你敲了pip install,入库装进了全局Python,法解可你的析导IDE却指向venv目录。两个世界互不相通,入库pip在那边忙活半天,你在这边望眼欲穿。解法简单到让人想骂人:先which python(Windows用where python),看看解释器路径是不是你心里想的那一个。我见过有人折腾一下午,最后发现终端里开着三个不同的conda环境。 还有一种情况,纯粹是pip自己犯迷糊。你装了库,但装到了用户目录——pip install --user会干这事。然后你的项目跑在系统级Python上,同样找不到。更隐蔽的是,有些库对Python版本挑三拣四,比如numpy在3.12上装得欢,但你的项目用的是3.10。这时候pip show 库名能告诉你它到底住哪,版本对不对得上。 别急着重装,先查sys.path。在Python里敲这几行,看输出里有没有你期望的site-packages路径。我曾经碰到过路径里混进一个旧项目的目录,导致import时加载了过期的同名模块——那玩意儿报错报得莫名其妙,什么"module has no attribute",其实压根是版本冲突。删掉那个旧路径,世界瞬间清净。 还有个坑,很多人没意识到:文件名。你要是把自己的脚本命名为requests.py,Python会优先加载当前目录的文件,而不是真正的库。这属于自作孽,但初学者常犯。我当年就干过这事,还以为是pip坏了,差点把环境删了重来。检查一下工作目录里有没有和库同名的.py文件,有就改名。 最后说个硬核的:依赖地狱。你装了库A,它依赖库B的1.0版本,但另一个库C需要B的2.0。pip可能给你装了两个版本,或者干脆冲突。这时候pip check会列出所有依赖问题。别硬扛,用虚拟环境隔离不同项目,或者用pip-tools这类工具管理版本。我一般直接删掉整个venv,重新python -m venv venv,干净利落,比在泥潭里挣扎快得多。 说到底,pip不解析导入库,九成是环境问题,一成是命名问题。先确认你在哪个Python里,再确认库装到了哪,最后看一眼有没有同名文件。三步走完,基本能解决。要是还不行,那就`pip uninstall`再`pip install`,有时候重装治百病——别问我为什么,玄学,但管用。 |