WPy64-3850 Spyder环境下导入Matplotlib出现TypeError问题求助
该报错是WPy64-3850预装的matplotlib版本与Python 3.8.5的Windows路径处理逻辑不兼容导致:
你当前使用的matplotlib版本(通常为3.3.x系列)初始化加载配置文件时,会将路径以WindowsPath对象的格式传入os.path.expanduser方法,但Python 3.8内置的该方法不支持接收Path类型对象,仅支持字符串、字节或传统os.PathLike类型的路径,因此触发类型错误。
方案1(优先推荐):升级matplotlib到兼容版本
打开WinPython自带的命令行终端,执行命令:pip install --upgrade matplotlib
升级到3.4.0及以上版本即可修复该路径适配bug,升级完成后重启Spyder再运行代码即可。方案2(适配低版本matplotlib):手动修改matplotlib源码
如果你的项目依赖当前matplotlib版本无法升级,可以直接修改报错对应的源码文件:
找到路径D:\instalacky\WPy64-3850\python-3.8.5.amd64\Lib\site-packages\matplotlib\__init__.py,定位到_open_file_or_url函数,在fname = os.path.expanduser(fname)代码行前新增一行fname = str(fname),将WindowsPath对象提前转为字符串类型即可解决报错。方案3(临时代码规避):在导入matplotlib前手动指定配置路径
无需修改环境或源码,在你自己的代码最开头添加如下代码,提前将配置路径转为字符串格式:
import os os.environ["MATPLOTLIBRC"] = str(os.path.expanduser("~/.matplotlib/matplotlibrc")) from matplotlib import pyplot as plt
内容的提问来源于stack exchange,提问作者Tomáš Kmínek

