Ich installiere Python 2.7 unter CentOS 5. Ich habe Python wie folgt erstellt und installiert
./configure --enable-shared --prefix=/usr/local
make
make install
Wenn ich versuche, / usr / local / bin / python auszuführen, wird diese Fehlermeldung angezeigt
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Wenn ich ldd unter / usr / local / bin / python ausführe, bekomme ich
ldd /usr/local/bin/python
libpython2.7.so.1.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000)
libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000)
libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000)
/lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000)
Wie sage ich Python, wo Libpython zu finden ist?
gdb
über die Befehlszeile ausgeführt werden und LD_LIBRARY_PATH im Terminal ordnungsgemäß eingerichtet ist? Wenn nicht, müssen Sie wahrscheinlich LD_LIBRARY_PATH in Ihrer.gdbinit
Datei einrichten . Siehe diese Antwort für weitere Informationen: stackoverflow.com/a/7041845/156771Ich setze meinen Totengräberhut auf ...
Der beste Weg, dies zu beheben, ist zur Kompilierungszeit. Da Sie ohnehin das einzige Einstellungspräfix sind, können Sie der ausführbaren Datei auch explizit mitteilen, wo sich die gemeinsam genutzten Bibliotheken befinden. Im Gegensatz zu OpenSSL und anderen Softwarepaketen bietet Python keine nützlichen Konfigurationsanweisungen für die Verarbeitung alternativer Bibliothekspfade (nicht jeder ist Root, den Sie kennen ...). Im einfachsten Fall benötigen Sie lediglich Folgendes:
Oder wenn Sie die Nicht-Linux-Version bevorzugen:
Das "
rpath
" -Flag teilt Python mit, dass es Laufzeitbibliotheken hat, die es in diesem bestimmten Pfad benötigt. Sie können diese Idee weiterentwickeln, um Abhängigkeiten zu behandeln, die an einem anderen Speicherort als den Standardsystemstandorten installiert sind. Auf meinen Systemen sieht meine Konfigurationszeile beispielsweise folgendermaßen aus, da ich keinen Root-Zugriff habe und fast vollständig eigenständige Python-Installationen durchführen muss:In diesem Fall bin ich Kompilieren die Bibliotheken , dass Python verwendet (wie
ffi
,readline
usw.) in einextlib
Verzeichnis innerhalb des Python - Verzeichnisbaum selbst. So kann ich die Python Teer kann - $ {PYTHON_VERSION} Verzeichnis und landen sie überall , und es wird „Arbeit“ (sofern Sie nicht den Weg laufenlibc
oderlibm
Konflikte). Dies ist auch hilfreich, wenn Sie versuchen, mehrere Versionen von Python auf derselben Box auszuführen, da Sie nicht ständig Änderungen vornehmenLD_LIBRARY_PATH
oder sich Sorgen machen müssen, die falsche Version der Python-Bibliothek zu finden.Bearbeiten: Vergessen zu erwähnen, dass sich die Kompilierung beschwert, wenn Sie die
PYTHONPATH
Umgebungsvariable nicht auf das setzen , was Sie als Präfix verwenden, und einige Module nicht kompilieren können, z. B. um das obige Beispiel zu erweitern, setzen Sie dasPYTHONPATH
auf das oben verwendete Präfix Beispiel mitexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...quelle
$PYTHON_VERSION
?$PYTHON_VERSION
nach der Konfiguration.$PYTHON_VERSION
Python build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
Befehl und anderen Installationsbefehlen?/apps/python-${PYTHON_VERSION}/extlib
um sicherzustellen, dass sich ihre Bibliotheken und Header an der richtigen Stelle befinden, damit der Python- Erstellungsprozess sie findet. Bei Paketen auf Systemebene müssen Sie sich wahrscheinlich darauf verlassen, dass ein Root-Benutzer diese Pakete zuvor für Sie installiert. Oder eine Alternative finden, die kompiliert und imextlib
Ich hatte das gleiche Problem und habe es folgendermaßen gelöst:
Wenn Sie wissen, wo sich libpython befindet, können Sie
/usr/local/lib/libpython2.7.so.1.0
in Ihrem Fall einfach einen symbolischen Link dazu erstellen:Versuchen Sie dann
ldd
erneut zu laufen und prüfen Sie, ob es funktioniert hat.quelle
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:
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:
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:
Was auf meiner Maschine gerade hatte:
Also habe ich eine neue Datei erstellt:
Und hinzugefügt:
Und um den Cache manuell neu zu erstellen:
Das war's, Skripte funktionieren gut!
Dies war eine vorübergehende Lösung, die bei Neustarts nicht funktioniert hat:
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
chown
den 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:
Was auf meiner VM zurückkehrt:
Welches ist der Pfad, den ich zu ldconfig geben muss, wie oben gezeigt.
quelle
#!/bin/bash
undsource scl_source enable rh-python35
darin. access.redhat.com/solutions/527703Unter Solaris 11
Verwenden Sie
LD_LIBRARY_PATH_64
diese Option, um den Symlink zu Python-Bibliotheken aufzulösen.In meinem Fall für Python3.6
LD_LIBRARY_PATH
hat es nicht funktioniert, aber es hatLD_LIBRARY_PATH_64
funktioniert.Hoffe das hilft.
Grüße
quelle
Das hat bei mir funktioniert ...
quelle
Ich habe mit dem Befehl installiert:
Nun, als Root-Benutzer:
Dann habe ich versucht, Python auszuführen und bekam den Fehler:
Dann habe ich mich vom Root-Benutzer abgemeldet und erneut versucht, Python auszuführen, und es hat erfolgreich funktioniert.
quelle
Alles was es braucht ist die Installation der Installation von libpython [3 oder 2] Dev-Dateien.
quelle
Installieren Sie einfach Python-Lib. (python27-lib). Es wird libpython2.7.so1.0 installiert. Wir müssen nichts manuell einstellen.
quelle