Python exécutable ne pas trouver libpython bibliothèque partagée
Je suis d'installer Python 2.7 sur CentOS 5. J'ai construit et installé Python comme suit
./configure --enable-shared --prefix=/usr/local
make
make install
Lorsque j'essaie d'exécuter le fichier /usr/local/bin/python, j'obtiens ce message d'erreur
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Quand je lance la commande ldd sur /usr/local/bin/python, je reçois
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)
Comment dois-je dire à Python où trouver libpython?
Vous devez vous connecter pour publier un commentaire.
Essayez ce qui suit:
Remplacer
/usr/local/lib
avec le dossier où vous avez installélibpython2.7.so.1.0
si elle n'est pas dans/usr/local/lib
.Si cela fonctionne et si vous voulez rendre les modifications permanentes, vous avez deux options:
Ajouter
export LD_LIBRARY_PATH=/usr/local/lib
à votre.profile
dans votre répertoire home (cela ne fonctionne que si vous utilisez un shell qui permet de charger ce fichier lorsqu'une nouvelle instance du shell est lancé). Cela affectera votre utilisateur uniquement.Ajouter
/usr/local/lib
à/etc/ld.so.conf
et exécuterldconfig
. C'est un système à l'échelle de réglage de cours.gdb
à partir de la ligne de commande et LD_LIBRARY_PATH est configuré correctement dans le terminal? Si non, vous devrez probablement configurer LD_LIBRARY_PATH dans votre.gdbinit
fichier. Voir cette réponse pour plus d'info: stackoverflow.com/a/7041845/156771/usr/local
, j'ai donc utilisé que dans ma réponse. Si votre Python est ailleurs, ajuster les chemins d'accès en conséquence.export LD_LIBRARY_PATH=/usr/local/lib
à/etc/profile
et de l'approvisionnement (source /etc/profile
) le profil résolu mon cas. Je vous remercie beaucoup.LD_LIBRARY_PATH
dans le cadre de laLDFLAGS
lors de la configuration pourmake
Mettre sur mon fossoyeur chapeau...
Le meilleur moyen que j'ai trouvé à l'adresse c'est au moment de la compilation. Puisque vous êtes le seul réglage préfixe de toute façon, pourrait tout aussi bien dire l'exécutable explicitement où trouver ses bibliothèques partagées. Contrairement à d'OpenSSL et autres logiciels, Python ne vous donne pas agréable de configurer des directives pour gérer suppléant de la bibliothèque des chemins (pas tout le monde est à la racine, vous savez...) Dans le cas le plus simple de tous vous avez besoin est le suivant:
Ou si vous préférez la non-linux version:
La "
rpath
" drapeau indique à python qu'il a des bibliothèques d'exécution dont il a besoin dans cette voie-là. Vous pouvez prendre cette idée pour gérer les dépendances installé à un emplacement différent de la norme emplacements du système. Par exemple, sur mes systèmes puisque je n'ai pas accès à la racine et le besoin de faire presque complètement autonome Python installe, ma ligne de configuration ressemble à ceci:Dans ce cas, je suis de compiler les bibliothèques que python utilise (comme
ffi
,readline
, etc) dans unextlib
répertoire dans le répertoire python arbre lui-même. De cette façon, je peux goudron python-${PYTHON_VERSION} répertoire et de la terre n'importe où et il va "travailler" (à condition que vous ne courez pas danslibc
oulibm
conflits). Cela aide aussi quand vous essayez d'exécuter plusieurs versions de Python sur la même zone, comme vous n'avez pas besoin de changer votreLD_LIBRARY_PATH
ou des inquiétudes au sujet de la cueillette de la mauvaise version de la bibliothèque Python.Edit: j'ai Oublié de mentionner, la compilation va se plaindre si vous ne définissez pas la
PYTHONPATH
variable d'environnement pour ce que vous utilisez comme votre préfixe et ne parviennent pas à compiler des modules, par exemple, d'étendre l'exemple ci-dessus, réglez lePYTHONPATH
le préfixe utilisé dans l'exemple ci-dessus avecexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...$PYTHON_VERSION
?$PYTHON_VERSION
après la configuration. Même avec la$PYTHON_VERSION
ensemble, toutefois, le compilateur se plaintPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
de commande et d'autres commandes d'installation?Python
besoins de l'application du système de paquets commeyum install python-lxml
?/apps/python-${PYTHON_VERSION}/extlib
pour assurer leurs bibliothèques et en-têtes sont dans le bon emplacement pour le Python rendre le processus pour trouver. À niveau du système de paquets, vous seriez probablement coincé en s'appuyant sur l'utilisateur root pour installer ces pour vous à l'avance. Ou trouver une alternative qui peut être compilé et a atterri dans laextlib
-Wl,--rpath=
et-L
pièces dans leLDFLAGS
.-Wl,--rpath=
ne suffit pas. Je serais intéressé de savoir quand et pourquoi-L
pourrait être nécessaire.J'ai eu le même problème et je l'ai résolu de cette façon:
Si vous savez où libpython réside à l', j'ai supposé qu'il serait
/usr/local/lib/libpython2.7.so.1.0
dans votre cas, il vous suffit de créer un lien symbolique vers:Puis essayez d'exécuter
ldd
à nouveau et de voir si cela a fonctionné.J'ai installé Python 3.5 par Logiciel De Collections sur CentOS 7 minime. Tout a bien fonctionné sur son propre, mais j'ai vu l'erreur de bibliothèque partagée mentionnées dans cet question, quand j'ai essayé de courir un simple script CGI:
Je voulais un système permanent de la solution qui fonctionne pour tous les utilisateurs, de sorte que les exclus de l'ajout d'exportation des déclarations .de profil ou de .bashrc fichiers. Il y a une solution en ligne, basé sur le Les solutions Red Hat page. Merci pour le commentaire qu'il souligne:
Après un redémarrage, c'est du tout bon sur la coque, mais parfois mon serveur web se plaint toujours. Il y a une autre approche qui a toujours travaillé pour à la fois la coquille et le serveur, et est plus générique. J'ai vu la solution ici puis réaliser qu'il est effectivement mentionné dans l'une des réponses ici! De toute façon, sur CentOS 7, voici les étapes:
Qui sur ma machine juste eu:
J'ai donc créé un nouveau fichier:
Et a ajouté:
Et reconstruire manuellement le cache:
Que c'est, scripts, beau travail!
C'était une solution temporaire, qui n'a pas fonctionné lors des redémarrages:
L'option-v (verbose) option était juste pour voir ce qui se passait. J'ai vu qu'il a fait:
/opt/rh/rh-python35/root/usr/lib64:
libpython3.donc.rh-python35 -> libpython3.donc.rh-python35
libpython3.5m.donc.rh-python35-1.0 -> libpython3.5m.donc.rh-python35-1.0
Cette erreur a disparu. D'ailleurs, j'ai dû
chown
à l'utilisateur d'apache pour se débarrasser d'une erreur d'autorisation après que.Notez que j'ai utilisé trouver pour localiser le répertoire de la bibliothèque. Vous pouvez aussi faire:
Qui sur ma VM retourne:
Qui est le chemin que j'ai besoin de donner à ldconfig, comme indiqué ci-dessus.
#!/bin/bash
etsource scl_source enable rh-python35
en elle. access.redhat.com/solutions/527703Cela a fonctionné pour moi...
Sur Solaris 11
Utilisation
LD_LIBRARY_PATH_64
pour résoudre un lien symbolique pour les libs python.Dans mon cas pour python3.6
LD_LIBRARY_PATH
n'ai pas de travail maisLD_LIBRARY_PATH_64
fait.Espère que cette aide.
Ce qui concerne
J'ai installé à l'aide de la commande:
Maintenant, en tant qu'utilisateur root:
Puis j'ai essayé d'exécuter du python et obtenu l'erreur:
Puis, je me suis déconnecté de la racine de l'utilisateur et de nouveau essayé d'exécuter du Python et cela a fonctionné avec succès.
Tout ce qu'il faut c'est l'installation de libpython [3 ou 2] dev fichiers d'installation.
il suffit d'installer python-lib. (python27-lib). Il va installer libpython2.7.rs1.0. Nous n'avons pas besoin de régler manuellement quoi que ce soit.