pip3安装matplotlib默认装到Anaconda 全局Python无法调用如何解决
你执行pip3 install matplotlib时包被装到Anaconda路径下,核心原因是当前终端的环境变量里Anaconda的bin目录优先级高于全局Python 3.10的bin目录,pip3命令实际绑定的是Anaconda内置Python 3.9的包管理器,安装的包自然只能被Anaconda解释器识别,全局Python 3.10默认不会扫描Anaconda的site-packages目录,自然找不到matplotlib。
方法1:指定全局Python解释器调用pip安装(最稳妥,零配置冲突)
不用改任何环境变量,直接调用全局Python 3.10自带的pip模块安装,100%不会装错路径:
- 先确认全局Python 3.10的执行路径,终端执行:
官网pkg安装的全局Python默认路径一般是which python3.10/Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10,Homebrew安装的默认路径是/opt/homebrew/bin/python3.10(Apple Silicon)或/usr/local/bin/python3.10(Intel芯片)。 - 用该解释器调用pip安装matplotlib:
python3.10 -m pip install matplotlib原理:
-m pip参数会直接调用当前解释器绑定的pip模块,完全不受环境变量里pip指向的影响,包会直接安装到全局Python 3.10对应的site-packages目录下。 - 安装完成后执行以下命令验证,输出路径属于全局Python 3.10的site-packages即安装成功:
python3.10 -c "import matplotlib; print(matplotlib.__version__, matplotlib.__file__)"
方法2:调整环境变量优先级,让pip3默认指向全局Python
如果你不想每次安装包都敲python3.10 -m pip,可以调整shell的PATH变量顺序,把全局Python的bin目录放到Anaconda路径前面:
- 先拿到全局Python 3.10对应的bin目录路径,比如上一步查到python3.10路径是
/Library/Frameworks/Python.framework/Versions/3.10/bin/python3.10,对应的bin目录就是/Library/Frameworks/Python.framework/Versions/3.10/bin。 - 编辑你当前使用的shell配置文件(zsh对应
~/.zshrc,bash对应~/.bash_profile),在文件最开头加一行路径配置:export PATH="你刚才拿到的全局Python bin目录绝对路径:$PATH" - 保存退出后执行
source ~/.zshrc(对应zsh)让配置生效,此时执行which pip3会看到指向全局Python 3.10目录下的pip,后续直接用pip3 install就会把包装到全局环境。
注意:调整优先级后终端默认输入python3会优先调用全局3.10版本,需要使用Anaconda时手动执行conda activate即可,不会损坏Anaconda本身的环境。
不要手动把Anaconda的/opt/anaconda3/lib/python3.9/site-packages路径加到全局Python 3.10的模块搜索路径里凑合用:Anaconda下安装的matplotlib是针对Python 3.9编译的,跨版本加载会出现ABI不兼容报错,连带的依赖(比如你提到的python-dateutil)版本也不匹配,运行时会出各种难以排查的异常。
安装完成后,在VSCode中按快捷键Cmd+Shift+P(macOS)/Ctrl+Shift+P(Windows/Linux),调出命令面板后选择Python: Select Interpreter,在列表里选中版本为3.10.4 64-bit的全局Python解释器,之后运行代码就可以正常导入matplotlib了。
内容的提问来源于stack exchange,提问作者vndyo

