PyInstaller ne peut pas trouver libpython2.7.ainsi, en faisant des binaires?
Je suis en train de faire une version binaire d'un script Python à l'aide PyInstaller 2.0 sur Linux. Quand je lance:
$ python pyinstaller.py myscript.py
J'obtiens l'erreur:
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!
Comment cela peut-il être fixé?
Je suis en utilisant:
Linux #98-Ubuntu x86_64 GNU/Linux
Avec python 2.7. Il y a d'autres Pythons sur le système mais je l'ai mis que:
alias python="python2.7"
Dans le serveur j'utilise, il n'y a qu' /usr/lib/python2.6
et pas /usr/lib/python2.7
mais python 2.7 est régulièrement utilisé par moi et il est fonctionnel, etc. donc je ne vois pas pourquoi ce serait un problème pour trouver ses bibliothèques. Il y a un /usr/local/lib/libpython2.7.a
.
D'abord: Quelle distro (et version) êtes-vous? Utilisez-vous, vous êtes à la distribution par défaut du paquet python? Avez-vous d'autres Python installations? Est-il réellement un
J'ai édité ma question pour répondre à vos questions
Il serait vraiment utile si vous avez répondu où vous avez obtenu les deux Python installations. Pourquoi ne 2.6 ont un
les deux python installations ont été installés sur notre cluster par le sys admin, je n'ai pas installé moi-même. Je pourrais si cela fait une différence, mais je préfère ne pas depuis les versions installées, beau travail
Eh bien, si il a installé
/usr/lib/libpython2.7.so
(ou ailleurs sur votre chemin)? (Il y a souvent deux pythonX.Y des forfaits, y compris juste assez pour exécuter l'interprète, y compris tous les trucs nécessaires pour compiler C extensions, etc., nommé quelque chose comme pythonX.Y-dev
, et parfois libpythonX.Y
est une partie de ce dernier.)J'ai édité ma question pour répondre à vos questions
Il serait vraiment utile si vous avez répondu où vous avez obtenu les deux Python installations. Pourquoi ne 2.6 ont un
so
mais 2,7 n'en a pas? Mais je vais essayer d'y répondre avec mes suppositions.les deux python installations ont été installés sur notre cluster par le sys admin, je n'ai pas installé moi-même. Je pourrais si cela fait une différence, mais je préfère ne pas depuis les versions installées, beau travail
Eh bien, si il a installé
python2.6
, libpython2.6
, et python2.7
, mais pas libpython2.7
, vous aurez besoin d'installer le dernier vous-même. Ou, si il a installé Python 2.7 à l'aide de quelque chose d'autre que le paquet Ubuntu, vous aurez besoin de les gérer. Si les versions installées "beau travail" que vous pouvez exécuter l'interprète, mais pas n' PyInstaller
, et vous avez besoin PyInstaller
, alors ce n'est vraiment pas bien fonctionner, non?
OriginalL'auteur user248237dfsf | 2013-02-03
Vous devez vous connecter pour publier un commentaire.
Si il n'y a pas de
libpython2.7.so
, bien sûr, cela sera un problème pour trouver la bibliothèque.La raison pour laquelle vous êtes en mesure d'utiliser l'interpréteur Python est probablement que c'est lié statiquement.
Il y a deux façons de résoudre ce problème.
D'abord, vous avez juste à installer les bibliothèques partagées pour votre Python 2.7. Si vous utilisez une ancienne version de Ubuntu qui est venu avec, disons, la version 2.6 de Python, et que vous avez installé 2.7 du
python2.7
paquet, cela devrait être une question de l'installation delibpython2.7
.Si vous avez obtenu votre 2.7 à partir d'une autre source, l'Ubuntu
libpython2.7
package de toute évidence ne fonctionne pas—ou il va travailler en installant une deuxième copie depython2.7
, pouvant écraser certains fichiers que vous avez déjà, et certainement en train de vous confondre. De toute façon, ne le faites pas. Soit obtenir le reste de Python pour votre 2.7, ou désinstallez le 2.7 et utiliser les paquets d'Ubuntu. (Pour certaines distributions Python, "obtenir le reste" est impossible, parce que si vous installez le shared libs, vous obtenez une dynamique liée Python exécutable au lieu de votre statiquement lié. Dans ce cas, vous devez le désinstaller et le réinstaller.)Seconde, vous pouvez utiliser
PyInstaller
'statique-lib de soutien. Voir billet 420 pour plus de détails, mais l'idée simple est que, si cette option est activée, et PyInstaller pense que votre plate-forme doit avoir unelibpython2.7.so
mais ne le trouve pas, il cherche unelibpython2.7.a
et lier statiquement à la place. La dernière fois que j'avais besoin de cela, il n'était pas vérifiée dans le tronc. À partir d'un rapide coup d'œil sur le billet, il semble que le patch est maintenant inclus, mais désactivé par défautPyInstaller
construit, et le cap est fixé à 3,0, donc, vous pourriez encore avoir à créer manuellementPyInstaller
pour obtenir que cela fonctionne.Une dernière chose: Il est possible que vous ne ont libpython2.7.oui, mais c'est juste installé quelque part bizarre comme
/opt/python27/lib
ou quelque chose, avec/opt/python27
nulle part sur votre chemin, mais/usr/local/bin/python27
pouvez le trouver parce qu'il est explicitement construit pour obtenir des choses de/opt/python27
. Ce genre de chose tend à être un problème uniquement pour les utilisateurs de Mac avec MacPorts ou Fink, pas les utilisateurs de Linux, mais il n'est pas impossible. Vous pouvez regarder le dl table pour/usr/local/bin/python27
si vous pensez que cela pourrait être la question.Avez-vous lu le reste de ce paragraphe? "Si... vous avez installé 2.7 de [Ubuntu]
python2.7
paquet, cela devrait être une question de l'installation delibpython2.7
." Si vous avez installé 2.7 à partir d'une source différente, évidemment je ne peux pas répondre à cette question, sauf si vous me dire comment vous l'avez installé.Je n'ai certainement et je ne sais toujours pas comment faire pour installer libpython 2.7. Cette norme est la procédure? Je ne peux pas installer quoi que ce soit dans /usr/* depuis que je ne suis pas le sys admin ici.
OK, si vous ne pouvez pas obtenir l'admin pour installer le
libpython2.7
paquet, et vous ne pouvez pas utiliser 2.6, alors oui, vous aurez à installer une copie distincte de Python 2.7 dans votre répertoire utilisateur (et assurez-vous de ne pas utiliser le système de la copie, il y aura une certaine confusion à traiter). Vous pouvez toujours être en mesure de le faire avecapt
/dpkg
(voir question, ou vous pouvez vagues pour installer à partir des sources. De toute façon, c'est probablement une question pour, par exemple, superuser.com ou askubuntu.com, pas le cas.OriginalL'auteur abarnert
Il y a 2 options: libpython*.donc, existe ou n'existe pas sur votre système. Vous pouvez le vérifier par un utilitaire de recherche à partir de la racine du répertoire. Dans le cas où le fichier existe déjà, mais ne peut toujours pas être trouvé par PyInstaller: la plupart des conseils généraux, c'est juste pour ouvrir PyInstaller code et de trouver le module qui a la responsabilité de trouver cette bibliothèque. Il peut être fait avec un simple éditeur. Que d'aller à ce module et de modifier lui de comprendre quel est le problème avec votre système. Le code est simple et prématurée), il vous faudra environ 5 minutes pour comprendre la raison. Dans mon cas, j'ai juste ajouté LD_LIBRARY_PATH=/usr/local/lib dans mon profil d'utilisateur.bash_profile) et de veiller à ce que l' *.si le fichier est à l'intérieur. Dans le cas où le fichier n'est pas sur votre système ou si vous avez une version incorrecte: il suffit de réinstaller le python.
OriginalL'auteur Yuri Levinsky
@Abarnert déjà dit, le problème semble être une compilation statique de python. Pour résoudre ce problème est nécessaire de recompiler python mais en y ajoutant le drapeau --enable-shared cette fois:
Une fois que vous faites cela, vous trouverez la demande de la bibliothèque (libpython2.7..1.0) dans /usr/local/lib chemin alors n'oubliez pas d'ajouter ce dossier à l' $variable d'environnement LD_LIBRARY_PATH:
OriginalL'auteur Fernando Martin