在RHEL中用pyenv安装的Python3.6.5运行Matplotlib遇_tkinter缺失错误
解决RHEL下pyenv安装的Python3.6.5运行Matplotlib报错问题
嘿,我碰到过好几个类似的问题了——在RHEL这类偏稳定的发行版上,用pyenv编译Python后跑Matplotlib出错,十有八九是系统依赖库缺失导致的。毕竟RHEL默认的软件包比较精简,而Python编译、Matplotlib运行都需要不少图形和底层库的支持,之前你安装Python的时候大概率没把这些依赖装全,导致后续出问题。给你一步步来解决:
第一步:先装全系统级依赖库
先通过yum(RHEL8及以上可以用dnf)把编译Python和运行Matplotlib必需的包装上,重点是图形渲染、字体处理相关的库:
sudo yum install -y gcc gcc-c++ make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel freetype-devel libpng-devel
这里tk-devel是Matplotlib默认tkinter后端必需的,freetype-devel和libpng-devel负责字体渲染和图片生成,缺了它们Matplotlib根本没法正常工作。
第二步:重新编译Python3.6.5
因为之前安装Python的时候这些依赖还没装,导致Python编译时跳过了对应的模块支持(比如tkinter),所以必须卸载后重新安装:
# 强制卸载已有的3.6.5版本 pyenv uninstall -f 3.6.5 # 重新安装,这次会自动用上刚装的系统依赖 pyenv install 3.6.5 # 再次设置为全局Python版本 pyenv global 3.6.5
第三步:重新安装兼容版本的Matplotlib
Python3.6.5比较老了,太新的Matplotlib版本已经不支持它了,建议安装3.3.x系列的最后一个稳定版,兼容性最好:
# 先升级当前Python对应的pip pip install --upgrade pip # 安装指定版本的Matplotlib pip install matplotlib==3.3.4
第四步:测试验证
你可以用一段简单的代码测试是否能正常运行:
import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.ylabel('some numbers') plt.show()
如果你的RHEL系统没有图形界面(比如服务器环境),plt.show()会报错,这时候可以切换到非交互式的Agg后端,生成图片文件而不是弹出窗口:
import matplotlib # 指定非交互式后端 matplotlib.use('Agg') import matplotlib.pyplot as plt plt.plot([1,2,3,4]) plt.savefig('test_plot.png')
运行后会在当前目录生成test_plot.png,打开看看就能验证是否正常工作了。
内容的提问来源于stack exchange,提问作者Sam Perry
相关产品推荐
相关产品推荐

