PyInstaller nicht finden libpython2.7.also, wenn macht binäre?
Ich versuche zu machen, eine binary-version eines Python-Skript mit PyInstaller 2.0 auf Linux. Wenn ich laufen:
$ python pyinstaller.py myscript.py
Bekomme ich die Fehlermeldung:
8907 INFO: Looking for Python library libpython2.7.so
Traceback (most recent call last):
...
File "pyinstaller.py", line 91, in <module>
raise IOError("Python library not found!")
IOError: Python library not found!
Wie kann dies behoben werden?
Ich bin mit:
Linux #98-Ubuntu x86_64 GNU/Linux
Mit python 2.7. Es gibt andere Pythons auf dem system, aber ich habe es eingestellt, dass:
alias python="python2.7"
In den server ich benutze, es gibt nur /usr/lib/python2.6
und nicht /usr/lib/python2.7
aber python 2.7 verwendet, die routinemäßig von mir und ist funktional, etc. also ich sehe es nicht, warum es wäre ein problem zu finden, Ihre Bibliotheken. Es ist ein /usr/local/lib/libpython2.7.a
.
- Erstens: Welche Distribution (und version) sind Sie auf? Verwenden Sie Sie bist Distribution der Standard-python-Paket? Haben Sie noch andere Python-Installationen? Gibt es eigentlich eine
/usr/lib/libpython2.7.so
(oder anderswo auf Ihrem Pfad)? (Oft gibt es zwei separate pythonX.Y-Pakete, einschließlich einer einfach genug zu laufen, der Dolmetscher, eine wie das ganze Zeug benötigt, um zu kompilieren von C-Erweiterungen, etc.., mit dem Namen etwas wiepythonX.Y-dev
, und manchmallibpythonX.Y
ist Teil des letzteren.) - Ich bearbeitet meine Frage, um Ihre Fragen zu beantworten
- Es wäre wirklich hilfreich, wenn Sie beantwortet, wo du die zwei Python-Installationen aus. Warum tut 2.6 haben eine
so
aber 2.7 nicht? Aber ich werde versuchen zu Antworten mit meinen Vermutungen. - die beiden python-Anlagen wurden installiert auf unserem cluster durch den sys-admin, die ich nicht installiert habe. Ich könnte, wenn es einen Unterschied macht, aber ich würde eher nicht, da die installierten Versionen funktionieren
- Naja, wenn er installiert
python2.6
,libpython2.6
, undpython2.7
, aber nichtlibpython2.7
, müssen Sie die Installation der letzten sich selbst. Oder, wenn er installiert ist Python 2.7 mit etwas anderem als Ubuntu-Paket, die Sie benötigen, um damit umzugehen. Wenn die installierten Versionen "funktionieren", dass Sie ausführen können, um die Dolmetscher, aber nicht ausgeführtPyInstaller
, und Sie müssenPyInstaller
, dann ist der wirklich nicht gut funktioniert, richtig? - Ich hatte das exakt gleiche Problem. Ich habe es behoben, indem Sie --enable-shared zu konfigurieren, bei der Installation von python2.7
InformationsquelleAutor | 2013-02-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es keine
libpython2.7.so
natürlich wird es ein problem sein zu finden, dass die Bibliothek.Der Grund, warum Sie in der Lage sind, die Verwendung der Python-interpreter ist wahrscheinlich, dass es statisch gelinkt.
Gibt es zwei Möglichkeiten, um dieses Problem zu lösen.
Ersten, können Sie einfach installieren Sie die gemeinsamen Bibliotheken für Python 2.7. Wenn Sie eine ältere version von Ubuntu, die kamen mit, sagen wir, Python 2.6, und 2.7 installiert von der
python2.7
- Paket, das sollte nur eine Frage der Installationlibpython2.7
.Wenn Sie bekommen haben Ihre 2.7 aus einer anderen Quelle, die Ubuntu
libpython2.7
Paket wird offensichtlich nicht funktioniert—oder es funktioniert durch die Installation einer zweiten Kopiepython2.7
möglicherweise überschreiben einige der Dateien, die Sie bereits haben, und definitiv verwirrt. So oder so, tun Sie es nicht. Entweder kommt dann der rest von Python für Ihre bestehende 2.7 oder deinstallieren 2.7 und nutzen die Ubuntu-Pakete. (Für einige Python-Distributionen "bekommen, den rest der es" unmöglich ist, weil, wenn Sie installieren die shared libs, bekommen Sie eine dynamisch verknüpfte Python-executable, anstatt Ihre statisch-gelinkte. In diesem Fall werden Sie ziemlich viel haben zu deinstallieren und neu zu installieren.)Zweite, Sie könnte verwenden
PyInstaller
's static-lib unterstützt. Sehen ticket-420 für die details, aber die einfache Idee ist, dass, wenn diese aktiviert ist, und PyInstaller denkt Ihr Plattform sollten einelibpython2.7.so
aber kann ihn nicht finden, es wird sich für einelibpython2.7.a
und statisch-link, statt. Letztes mal brauchte ich diese, es war nicht aktiviert in den Stamm. Von einem schnellen Blick auf das ticket, es sieht aus wie der patch ist nun enthalten, aber deaktiviert im Standard -PyInstaller
baut, und der Meilenstein 3.0, also, können Sie immer noch manuell erstellenPyInstaller
zu bekommen dies funktioniert.Eine Letzte Sache: Es ist möglich, dass Sie tun haben libpython2.7.so, aber es ist einfach irgendwo eingebaut seltsam wie
/opt/python27/lib
oder etwas, mit/opt/python27
nirgends auf den Weg, aber/usr/local/bin/python27
finden, weil es ausdrücklich gebaut, um die Sachen aus/opt/python27
. Diese Art der Sache neigt dazu, ein problem nur für Mac-Benutzer, die mit MacPorts oder Fink, nicht Linux-Nutzer, aber es ist nicht unmöglich. Sie können sich an der dl Tabelle für/usr/local/bin/python27
wenn Sie denken, dies könnte das Problem sein.python2.7
- Paket, das sollte nur eine Frage der Installationlibpython2.7
." Wenn Sie die Installation 2.7 aus einer anderen Quelle, natürlich kann ich die Frage nicht beantworten, es sei denn, Sie sagen mir, wie Sie es installiert haben.libpython2.7
Paket, und Sie nicht verwenden können, 2.6, dann ja, Sie müssen installieren Sie eine separate Kopie von Python 2.7 in Ihrem Benutzer-Verzeichnis (und stellen Sie sicher nicht zu verwenden, das system zu kopieren—es wird einige Verwirrung zu bewältigen). Sie können noch in der Lage, dies zu tun mitapt
/dpkg
(siehe diese Frage, oder Sie kann die Welle aus dem Quellcode installieren. So oder so, dies ist wahrscheinlich eine Frage für, z.B., superuser.com oder askubuntu.com nicht SO.Gibt es 2 Möglichkeiten: libpython*.so existiert oder nicht auf Ihrem system vorhanden ist. Sie können es von jedem Dienstprogramm "suchen" starten von root-Verzeichnis. Falls die Datei bereits existiert, aber noch nicht gefunden werden kann, die von PyInstaller: die meisten Generika-Beratung ist nur zu öffnen PyInstaller-code und finden Sie das Modul, das verantwortlich, um diese zu finden Bibliothek. Es kann getan werden, mit einfachen editor. Gehen Sie zu diesem Modul und Bearbeiten Sie ihn, um zu verstehen, was ist falsch mit Ihrem system geben. Der code ist einfach und verfrüht - es dauert ~ 5 Minuten, um den Grund zu verstehen. In meinem Fall habe ich nur noch LD_LIBRARY_PATH=/usr/local/lib zu meinem Benutzerprofil (.bash_profile) und sichergestellt hat, dass diese *.so-Datei drin ist. Falls die Datei noch nicht auf Ihrem system oder haben Sie die falsche version: so installieren Sie die python.
Als @abarnert schon sagte, das problem scheint zu sein, eine statische Zusammenstellung von python. Um dieses Problem zu lösen ist notwendig, neu zu kompilieren python, aber das hinzufügen der Flagge --enable-shared dieser Zeit:
Sobald Sie dies tun, finden Sie das angeforderte Bibliothek (libpython2.7.so.1.0) unter /usr/local/lib-Pfad, also vergessen Sie nicht, fügen Sie die Ordner, um die $LD_LIBRARY_PATH-Umgebungsvariable: