当我运行以下 Python 代码时,
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(3)
plt.pyplot(a, a)
plt.show
机器打印:
[test001@login01 ~]$ python3 draw.py
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-test001'
python3: symbol lookup error: /beegfs/home/test001/.local/lib/python3.11/site-packages/PyQt5/Qt5/plugins/platforms/..//lib/libQt5XcbQpa.so.5: undefined symbol: FT_Get_Font_Format
我尝试过Qt启动错误:符号查找错误:libQt5XcbQpa.so.5:未定义符号:FT_Get_Font_Format,但它不起作用。当我使用
[test001@login01 ~]$ readelf -s /lib64/libfreetype.so.6 | grep -i font_format
406: 0000000000020960 43 FUNC GLOBAL DEFAULT 11 FT_Get_X11_Font_Format
freetype-2.8,2.10,2.12也测试过了,输出是一样的,找不到FT_Get_Font_Format
这种情况下我应该怎么办呢?
Centos version: CentOS Linux release 7.5.1804 (Core)
Qt5 version: 5.15.2
PyQt5 version: 5.15.9
答案1
你的 PyQt 使用 FreeType 函数FT_获取字体格式。這很好。
但是你的 freetype lib libfreetype.so.6 只提供了FT_获取_X11_字体格式。这很糟糕,因为此功能已被弃用。
我检查了自己的系统,发现有相同的文件 libfreetype.so.6,它提供了较新的 FT_Get_Font_Format 函数。我的是 freetype 6.17.4。
因此你必须有一个 freetype 版本:
6 <= version < 6.17.4
在您的操作系统上安装所有更新。如果您的操作系统不提供较新的 freetype lib,则只需降级 matplotlib。
运行此命令来卸载当前的 matplotlib:
pip uninstall matplotlib
运行此命令列出所有可用的 matplotlib 版本:
pip index versions matplotlib
运行此命令来安装特定版本的 matplotlib:
pip install matplotlib==3.6.2
你可以从 3.6.2 开始,如果不行的话就卸载它,然后降级到 3.6.1。一直这样做,直到你的脚本运行正常。
答案2
其实是因为 的 freetype还没有完全编译完成freetype-2.8
,目前还在使用提供的freetype-2.10
版本。freetype-2.4
yum install freetype
我使用以下链接,然后FT_GET_Font_Format
就可以找到该功能。
export LD_LIBRARY_PATH=/usr/lib/zlib/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/libpng/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=software/freetype/lib:$LD_LIBRARY_PATH