Ich habe Python 3.5 von Software Collections auf CentOS 7 minimal installiert . Es hat alles gut funktioniert, aber ich habe den in dieser Frage erwähnten Fehler in der gemeinsam genutzten Bibliothek gesehen, als ich versucht habe, ein einfaches CGI-Skript auszuführen:
tail /var/log/httpd/error_log
AH01215: /opt/rh/rh-python35/root/usr/bin/python: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory
Ich wollte eine systemweite dauerhafte Lösung, die für alle Benutzer funktioniert, sodass das Hinzufügen von Exportanweisungen zu .profile- oder .bashrc-Dateien ausgeschlossen ist. Es gibt eine einzeilige Lösung, die auf der Red Hat-Lösungsseite basiert . Vielen Dank für den Kommentar, der darauf hinweist:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Nach einem Neustart ist alles gut in der Shell, aber manchmal beschwert sich mein Webserver immer noch. Es gibt einen anderen Ansatz, der sowohl für die Shell als auch für den Server immer funktioniert hat und allgemeiner ist. Ich habe die Lösung hier gesehen und dann festgestellt, dass sie auch hier in einer der Antworten erwähnt wird! Unter CentOS 7 sind dies die folgenden Schritte:
vim /etc/ld.so.conf
Was auf meiner Maschine gerade hatte:
include ld.so.conf.d/*.conf
Also habe ich eine neue Datei erstellt:
vim /etc/ld.so.conf.d/rh-python35.conf
Und hinzugefügt:
/opt/rh/rh-python35/root/usr/lib64/
Und um den Cache manuell neu zu erstellen:
sudo ldconfig
Das war's, Skripte funktionieren gut!
Dies war eine vorübergehende Lösung, die bei Neustarts nicht funktioniert hat:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
Die Option -v (ausführlich) war nur, um zu sehen, was los war. Ich habe gesehen, dass es funktioniert: / opt / rh / rh-python35 / root / usr / lib64: libpython3.so.rh-python35 -> libpython3.so.rh-python35 libpython3.5m.so.rh-python35-1.0 -> libpython3.5m.so.rh-python35-1.0
Dieser besondere Fehler ging weg. Übrigens musste ich chownden Benutzer apachen, um danach einen Berechtigungsfehler zu beseitigen.
Beachten Sie, dass ich find verwendet habe , um das Verzeichnis für die Bibliothek zu finden. Sie könnten auch tun:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Was auf meiner VM zurückkehrt:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Welches ist der Pfad, den ich zu ldconfig geben muss, wie oben gezeigt.