在使用 Python 数据可视化库 Matplotlib 时,你可能会遇到类似这样的一条提示:
Matplotlib is building the font cache; this may take a moment.
虽然这是一个正常的日志输出,但在运行一些简单脚本时,它会导致启动时间延迟,甚至在某些情境下,影响到项目的性能。
今天我们就来剖析这个问题的根源,并分享一套 高效、实用的解决方案!
Matplotlib 会使用字体缓存文件 (~/.matplotlib/fontlist.json
) 来加速字体加载。这一步骤包括扫描系统中的所有字体并生成映射关系。这种映射会存储在缓存文件中,以避免每次运行时重新扫描字体。
当以下情况出现时,Matplotlib 会重建字体缓存:
手动生成字体缓存可以避免每次运行代码时重复构建。只需运行以下命令:
import matplotlib
matplotlib.font_manager._rebuild()
✅ 结果:在首次执行时,缓存文件会被生成。之后的运行中,这条提示就不会再次出现。
在某些环境中,例如 Docker 容器,默认缓存路径可能无法持久化。此时,可以指定自定义的缓存路径:
import matplotlib
import os
# 指定自定义缓存目录
os.environ['MPLCONFIGDIR'] = '/path/to/custom/cache'
# 生成缓存
matplotlib.font_manager._rebuild()
✅ 结果:字体缓存会存储在 /path/to/custom/cache
目录下,避免在临时环境中频繁重建。
如果你只是想禁用日志输出,可以通过以下方式屏蔽它:
import logging
import matplotlib
logging.getLogger('matplotlib').setLevel(logging.WARNING)
✅ 结果:仍会生成缓存,但提示信息不会显示。
确保你的 Matplotlib 和相关依赖是最新版本:
pip install --upgrade matplotlib
或者在 Dockerfile 中优化:
RUN python -c "import matplotlib; matplotlib.font_manager._rebuild()"
✅ 结果:生成缓存后,镜像中的 Matplotlib 环境已经就绪。
以下是一个完整示例,展示如何在脚本中提前生成缓存并静默运行:
import matplotlib
import logging
import os
# 配置自定义缓存路径
os.environ['MPLCONFIGDIR'] = './matplotlib_cache'
# 屏蔽字体构建的提示信息
logging.getLogger('matplotlib').setLevel(logging.WARNING)
# 强制生成字体缓存
matplotlib.font_manager._rebuild()
# 开始你的 Matplotlib 可视化
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [4, 5, 6])
plt.title("测试字体缓存")
plt.show()
缓存位置检查:默认缓存文件路径可以通过以下方式查看:
import matplotlib
print(matplotlib.get_cachedir())
权限问题:如果运行脚本的用户没有权限写入缓存文件,会导致缓存失败。
Matplotlib
重建字体缓存的延迟。😺 猫头虎小问答: 你是否遇到过类似的性能问题?欢迎留言讨论,我们一起探索更优雅的解决方案!
✍️ 标签:Matplotlib
、字体缓存
、Python
、性能优化