
Wenn ich den folgenden Python-Code ausführe,
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(3)
plt.pyplot(a, a)
plt.show
Der Maschinendruck:
[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
Ich habe versucht,Qt-Startfehler: Symbolsuchfehler: libQt5XcbQpa.so.5: undefiniertes Symbol: FT_Get_Font_Format, aber es funktioniert nicht. Wenn ich
[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 werden ebenfalls getestet, die Ausgabe ist die gleiche, FT_Get_Font_Format kann nicht gefunden werden
Was soll ich in diesem Fall tun?
Centos version: CentOS Linux release 7.5.1804 (Core)
Qt5 version: 5.15.2
PyQt5 version: 5.15.9
Antwort1
Ihr PyQt verwendet die FreeType-FunktionFT_Get_Font_Format. Das ist gut.
Aber Ihre Freetype-Bibliothek libfreetype.so.6 bietet nurFT_Get_X11_Font_Format. Das ist schlecht, weil diese Funktion veraltet ist.
Ich habe mein eigenes System überprüft und habe dieselbe Datei libfreetype.so.6, die die neuere Funktion FT_Get_Font_Format bereitstellt. Ich habe Freetype 6.17.4.
Sie müssen also über eine Freetype-Version verfügen, die:
6 <= version < 6.17.4
Installieren Sie alle Updates auf Ihrem Betriebssystem. Wenn Ihr Betriebssystem keine neuere Freetype-Bibliothek anbietet, führen Sie einfach ein Downgrade von matplotlib durch.
Führen Sie Folgendes aus, um Ihre aktuelle Matplotlib zu deinstallieren:
pip uninstall matplotlib
Führen Sie dies aus, um alle verfügbaren Matplotlib-Versionen aufzulisten:
pip index versions matplotlib
Führen Sie dies aus, um eine bestimmte Version von Matplotlib zu installieren:
pip install matplotlib==3.6.2
Sie können mit 3.6.2 beginnen. Wenn das nicht funktioniert, deinstallieren Sie es und wechseln Sie eine Version zurück auf 3.6.1. Tun Sie dies, bis Ihr Skript einwandfrei läuft.
Antwort2
Der Grund liegt eigentlich darin, dass der Freetype von freetype-2.8
noch freetype-2.10
nicht vollständig kompiliert wurde. Die Version wird immer noch freetype-2.4
von bereitgestellt yum install freetype
.
Ich benutze die folgenden Links, dann FT_GET_Font_Format
ist die Funktion zu finden.
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