文章目录
- 1 前言
- 2 报错
- 报错1:ModuleNotFoundError: No module named 'distutils'
- 报错2:ERROR:root:code for hash blake2b was not found.
- 报错3:**`ModuleNotFoundError: No module named '_tkinter'`**
- 报错4:UserWarning: Glyph 39044 (\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.
- 方法 1:安装支持 CJK(中日韩)的字体
- 步骤 1:安装思源黑体(Noto Sans CJK)
- 步骤 2:清理 Matplotlib 字体缓存
- 方法 2:代码中指定中文字体
- 方法 3:修改 Matplotlib 配置文件
- 步骤 1:查找配置文件路径
- 步骤 2:编辑配置文件
- 验证是否生效
- 错误5 AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
- 结语
1 前言
最近在学习人工智能-机器学习入门,想通过python解决下线性回归问题。本人电脑为macos m1 pro,使用homebrew管理包依赖,
安装pyenv管理python版本,python版本3.12.x,openssl@1.1和python@3共存。
2 报错
报错1:ModuleNotFoundError: No module named ‘distutils’
产生过程:安装matplotlib报错ModuleNotFoundError: No module named ‘distutils’
原因分析:Python 3.12+ 移除了 distutils
:官方不再维护此模块,改用 setuptools
替代
解决方案:
# 强制升级 setuptools 和 pip
pip install --upgrade --force-reinstall setuptools pip
报错2:ERROR:root:code for hash blake2b was not found.
产生过程:运行如下代码
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
# read_csv里面的参数是csv在你电脑上的路径,此处csv文件放在notebook运行目录下面的CCPP目录里
data = pd.read_csv('./ccpp.csv')
data.head()
原因分析:
- 此错误通常表示当前 Python 环境中缺少
blake2b
哈希算法的支持,OpenSSL 依赖缺失或版本过低(需要 OpenSSL 1.1.1 或更高版本)。
解决方案:通过homebrew 卸载低版本openssl,升级最新版本openssl ,重新编译安装python
brew uninstall --ignore-dependencies openssl@1.1
brew install openssl
pyenv uninstall 3.12
pyenv install 3.12
pyenv global 3.12.9
报错3:ModuleNotFoundError: No module named '_tkinter'
-
产生过程:编译安装python的时候报错
-
产生原因:此错误表示 Python 环境中缺少 Tkinter 模块的支持,通常是因为在编译 Python 时未正确安装 Tcl/Tk 开发库
-
解决方案:安装依赖,重新编译安装python
brew install tcl-tk
最后环境配置正常如下图:
报错4:UserWarning: Glyph 39044 (\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.
在 macOS M1 Pro 上使用 Matplotlib 绘图时,如果遇到 UserWarning: Glyph XXXX missing from font(s) DejaVu Sans
警告,通常是因为 Matplotlib 默认字体 DejaVu Sans 不支持某些 Unicode 字符(如中文、日文、韩文字符)。
方法 1:安装支持 CJK(中日韩)的字体
步骤 1:安装思源黑体(Noto Sans CJK)
推荐安装 Google 的 Noto Sans CJK 字体,它覆盖了大部分 Unicode 字符:
bash
复制
# 通过 Homebrew 安装(需提前安装 Homebrew)
brew install font-noto-sans-cjk font-noto-sans-cjk-sc
# 或者手动下载并安装:
# 从官网下载:https://www.google.com/get/noto/
# 解压后双击 .ttf 文件,点击 "安装"。
步骤 2:清理 Matplotlib 字体缓存
Matplotlib 会缓存字体列表,安装新字体后需删除缓存:
bash
复制
# 查找缓存路径
python -c "import matplotlib; print(matplotlib.get_cachedir())"
# 输出类似:/Users/username/.matplotlib
# 删除该目录下的 fontlist-* 文件
rm -rf /Users/username/.matplotlib/fontlist-*
方法 2:代码中指定中文字体
在 Python 代码中直接指定使用已安装的中文字体(如 Noto Sans CJK
):
python
复制
import matplotlib.pyplot as plt
import numpy as np
# 设置 Matplotlib 使用支持中文的字体
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP'] # 根据字体名称调整
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 示例:绘制带中文标签的图表
plt.plot(np.random.rand(10))
plt.title('示例图表') # 中文标题
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
方法 3:修改 Matplotlib 配置文件
步骤 1:查找配置文件路径
bash
复制
python -c "import matplotlib; print(matplotlib.matplotlib_fname())"
# 输出类似:/Users/username/.virtualenvs/venv/lib/python3.9/site-packages/matplotlib/mpl-data/matplotlibrc
步骤 2:编辑配置文件
找到以下两行并修改:
bash
复制
# 去掉注释并设置字体
font.family : sans-serif
font.sans-serif : Noto Sans CJK JP, DejaVu Sans, Arial # 添加 Noto Sans CJK 到字体列表开头
验证是否生效
运行以下代码检查是否支持中文:
python
复制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP']
plt.plot([1, 2, 3], [4, 5, 6])
plt.title('测试中文')
plt.show()
如果图表标题正常显示中文,则问题解决。
错误5 AttributeError: ‘FigureCanvasInterAgg’ object has no attribute ‘tostring_rgb’. Did you mean: ‘tostring_argb’?
解决方案,更换matplotlib后端
matplotlib.use('TkAgg')
效果如下图所示:
结语
❓QQ:806797785
⭐️仓库地址:https://gitee.com/gaogzhen
⭐️仓库地址:https://github.com/gaogzhen
[1]deepseek[CP/OL].