Anaconda(base)环境下VSCode运行Python脚本导入numpy报错 交互模式正常
问题根源
你贴的报错栈里已经把根本原因写得非常清楚了,你之前排查的时候完全漏看了这一行:
File "C:\Users\UserX\numpy.py", line 2, in <module> import matplotlib
问题根本不是numpy安装损坏、也不是VSCode解释器配错了——是你当前运行脚本的目录下,有一个你自己创建的、命名为numpy.py的文件,直接把Anaconda安装的正版numpy包给覆盖了。
为什么会出现你看到的所有奇怪现象
- Python的模块搜索有固定优先级:启动解释器时,会优先把当前工作目录放到模块搜索路径的第一位,优先级远高于Anaconda的site-packages目录
- 当你在
C:\Users\UserX目录下运行python test.py时,解释器执行到import numpy,会先在当前目录找匹配的模块,直接命中了你自己写的那个numpy.py,根本不会去读取Anaconda安装的正版numpy包 - 你那个自定义的
numpy.py第二行写了import matplotlib,执行的时候就顺着你的脚本往下跑,最终因为你这个自定义文件根本没有numpy.core相关的内容,才会抛出No module named 'numpy.core'、'numpy' is not a package的报错 - 你直接在终端开Python交互模式导入numpy没报错,是因为开交互模式时的工作目录恰好不在存放那个
numpy.py的路径下,没触发本地同名文件的优先级覆盖,自然就正常加载到了Anaconda的numpy - 你之前重装numpy、matplotlib、Anaconda、VSCode都解决不了,是因为问题根本不在这些软件本身,就是个文件名冲突的低级疏漏
修复步骤
- 打开路径
C:\Users\UserX,找到你放的那个numpy.py文件,要么彻底删掉,要么重命名为完全不跟第三方包重名的名字(比如numpy_demo.py) - 顺便检查这个目录下有没有其他和第三方包同名的脚本,比如
matplotlib.py、pandas.py之类的,全部改名,避免后续再触发同类覆盖问题 - 改完之后在当前目录执行命令验证numpy加载路径是否正确:
如果输出的路径是python -c "import numpy; print(numpy.__file__)"C:\ProgramData\Anaconda3\lib\site-packages\numpy\__init__.py,就说明已经恢复正常加载Anaconda的numpy,不会再读到本地的自定义脚本了 - 回到VSCode重新运行你的
test.py,之前的报错会全部消失
注意:写Python脚本时一定要避开和标准库、第三方包完全重名的文件名,这是Python开发里非常常见的踩坑点,哪怕你只是临时写个测试脚本,也别直接用包名当文件名。
内容的提问来源于stack exchange,提问作者tikrit
相关产品推荐
相关产品推荐

