J'installe 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'essaye d'exécuter / 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 j'exécute ldd sur / usr / local / bin / python, j'obtiens
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 dire à Python où trouver libpython?
gdb
partir de la ligne de commande et que LD_LIBRARY_PATH est correctement configuré dans le terminal? Sinon, vous devrez probablement configurer LD_LIBRARY_PATH dans votre.gdbinit
fichier. Voir cette réponse pour plus d'informations: stackoverflow.com/a/7041845/156771Mettre mon chapeau de fossoyeur ...
Le meilleur moyen que j'ai trouvé pour résoudre ce problème est au moment de la compilation. Puisque vous êtes de toute façon le préfixe de réglage, autant dire explicitement à l'exécutable où trouver ses bibliothèques partagées. Contrairement à OpenSSL et à d'autres logiciels, Python ne vous donne pas de bonnes directives de configuration pour gérer d'autres chemins de bibliothèque (tout le monde n'est pas root, vous savez ...) Dans le cas le plus simple, tout ce dont vous avez besoin est le suivant:
Ou si vous préférez la version non linux:
Le
rpath
drapeau " " indique à python qu'il a des bibliothèques d'exécution dont il a besoin dans ce chemin particulier. Vous pouvez approfondir cette idée pour gérer les dépendances installées à un emplacement différent de celui des emplacements système standard. Par exemple, sur mes systèmes, puisque je n'ai pas d'accès root et que je dois effectuer des installations Python presque complètement autonomes, ma ligne de configuration ressemble à ceci:Dans ce cas , je suis compilant les bibliothèques que les utilisations de python (comme
ffi
,readline
, etc.) dans unextlib
répertoire dans l'arborescence de répertoire python lui - même. De cette façon, je peux tarer le répertoire python - $ {PYTHON_VERSION} et l'atterrir n'importe où et cela "fonctionnera" (à condition que vous n'ayez pas de conflitlibc
ou delibm
conflit). Cela aide également lorsque vous essayez d'exécuter plusieurs versions de Python sur la même boîte, car vous n'avez pas besoin de continuer à changer votreLD_LIBRARY_PATH
ou de vous soucier de choisir la mauvaise version de la bibliothèque Python.Edit: J'ai oublié de mentionner, la compilation se plaindra si vous ne définissez pas la
PYTHONPATH
variable d'environnement sur ce que vous utilisez comme préfixe et ne parvenez pas à compiler certains modules, par exemple, pour étendre l'exemple ci-dessus, définissez lePYTHONPATH
sur le préfixe utilisé dans ce qui précède exemple avecexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...la source
$PYTHON_VERSION
?$PYTHON_VERSION
après la configuration. Même avec l'$PYTHON_VERSION
ensemble, cependant, le compilateur se plaint dePython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
commande et d'autres commandes d'installation?/apps/python-${PYTHON_VERSION}/extlib
pour assurer leurs bibliothèques et les en- têtes sont au bon endroit pour le processus de Python faire pour trouver. En ce qui concerne les packages de niveau système, vous seriez probablement bloqué en vous appuyant sur un utilisateur root pour les installer à l'avance. Ou trouver une alternative qui peut être compilée et atterri dans leextlib
J'ai eu le même problème et je l'ai résolu de cette façon:
Si vous savez où se trouve libpython, je suppose que ce serait
/usr/local/lib/libpython2.7.so.1.0
dans votre cas, vous pouvez simplement créer un lien symbolique vers celui-ci:Ensuite, essayez de
ldd
recommencer et voyez si cela a fonctionné.la source
J'ai installé Python 3.5 par Software Collections sur CentOS 7 minimal. Tout a bien fonctionné tout seul, mais j'ai vu l'erreur de bibliothèque partagée mentionnée dans cette question lorsque j'ai essayé d'exécuter un simple script CGI:
Je voulais une solution permanente à l'échelle du système qui fonctionne pour tous les utilisateurs, ce qui excluait l'ajout d'instructions d'exportation aux fichiers .profile ou .bashrc. Il existe une solution en une seule ligne, basée sur la page des solutions Red Hat . Merci pour le commentaire qui le souligne:
Après un redémarrage, tout va bien sur le shell, mais parfois mon serveur web se plaint encore. Il existe une autre approche qui a toujours fonctionné à la fois pour le shell et le serveur, et qui est plus générique. J'ai vu la solution ici , puis j'ai réalisé qu'elle était également mentionnée dans l'une des réponses ici! Quoi qu'il en soit, sur CentOS 7, voici les étapes:
Lequel sur ma machine avait juste:
J'ai donc créé un nouveau fichier:
Et ajouté:
Et pour reconstruire manuellement le cache:
Voilà, les scripts fonctionnent bien!
C'était une solution temporaire, qui ne fonctionnait pas entre les redémarrages:
L'option -v (verbose) était juste pour voir ce qui se passait. J'ai vu que c'était le cas: / 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
Cette erreur particulière a disparu. Incidemment, je devais à
chown
l'utilisateur apache pour se débarrasser d'une erreur d'autorisation après cela.Notez que j'ai utilisé find pour localiser le répertoire de la bibliothèque. Vous pouvez également faire:
Qui sur ma VM renvoie:
Quel est le chemin que je dois donner à ldconfig, comme indiqué ci-dessus.
la source
#!/bin/bash
etsource scl_source enable rh-python35
dedans. access.redhat.com/solutions/527703Sur Solaris 11
Utilisez
LD_LIBRARY_PATH_64
pour résoudre le lien symbolique vers les bibliothèques python.Dans mon cas, python3.6
LD_LIBRARY_PATH
n'a pas fonctionné maisLD_LIBRARY_PATH_64
a fonctionné.J'espère que cela t'aides.
Cordialement
la source
Cela a fonctionné pour moi ...
la source
J'ai installé en utilisant la commande:
Maintenant, en tant qu'utilisateur root:
Ensuite, j'ai essayé d'exécuter python et j'ai obtenu l'erreur:
Ensuite, je me suis déconnecté de l'utilisateur root et j'ai à nouveau essayé d'exécuter le Python et cela a fonctionné avec succès.
la source
Tout ce dont il a besoin est l'installation des fichiers de développement de libpython [3 ou 2].
la source
installez simplement python-lib. (python27-lib). Il installera libpython2.7.so1.0. Nous n'avons pas besoin de définir quoi que ce soit manuellement.
la source