Estoy instalando Python 2.7 en CentOS 5. Construí e instalé Python de la siguiente manera
./configure --enable-shared --prefix=/usr/local
make
make install
Cuando intento ejecutar / usr / local / bin / python, recibo este mensaje de error
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Cuando ejecuto ldd en / usr / local / bin / python, obtengo
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)
¿Cómo le digo a Python dónde encontrar libpython?
gdb
desde la línea de comandos y LD_LIBRARY_PATH está configurado correctamente en el terminal? De lo contrario, probablemente tendrá que configurar LD_LIBRARY_PATH en su.gdbinit
archivo. Consulte esta respuesta para obtener más información: stackoverflow.com/a/7041845/156771Poniéndome el sombrero de sepulturero ...
La mejor manera que he encontrado para abordar esto es en tiempo de compilación. Dado que usted es el prefijo de configuración de todos modos, también podría decirle al ejecutable explícitamente dónde encontrar sus bibliotecas compartidas. A diferencia de OpenSSL y otros paquetes de software, Python no le brinda directivas de configuración agradables para manejar rutas alternativas de la biblioteca (no todos son root, ya sabe ...) En el caso más simple, todo lo que necesita es lo siguiente:
O si prefiere la versión no Linux:
La
rpath
bandera " " le dice a Python que tiene bibliotecas de tiempo de ejecución que necesita en esa ruta en particular. Puede llevar esta idea más allá para manejar las dependencias instaladas en una ubicación diferente a las ubicaciones estándar del sistema. Por ejemplo, en mis sistemas, dado que no tengo acceso a la raíz y necesito realizar instalaciones de Python casi completamente independientes, mi línea de configuración se ve así:En este caso soy compilar las bibliotecas que utiliza Python (como
ffi
,readline
, etc.) en unextlib
directorio dentro de la pitón propio árbol de directorios. De esta forma, puedo usar el directorio python - $ {PYTHON_VERSION} y aterrizar en cualquier lugar y "funcionará" (siempre que no te encuentreslibc
o tengaslibm
conflictos). Esto también ayuda cuando intentas ejecutar varias versiones de Python en el mismo cuadro, ya que no necesitas seguir cambiandoLD_LIBRARY_PATH
o preocuparte por elegir la versión incorrecta de la biblioteca de Python.Editar: Olvidé mencionar que la compilación se quejará si no configura la
PYTHONPATH
variable de entorno a lo que usa como prefijo y no compila algunos módulos, por ejemplo, para ampliar el ejemplo anterior, configurePYTHONPATH
el prefijo utilizado en el anterior ejemplo conexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...fuente
$PYTHON_VERSION
?$PYTHON_VERSION
después de configurar. Sin$PYTHON_VERSION
embargo, incluso con el set, el compilador se quejaPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
comando y otros comandos de instalación?/apps/python-${PYTHON_VERSION}/extlib
asegurar sus bibliotecas y cabeceras están en la ubicación adecuada para el proceso de composición del pitón de encontrar. En cuanto a los paquetes a nivel de sistema, probablemente se quedará atrapado confiando en un usuario root para que los instale de antemano. O encontrar una alternativa que se pueda compilar y aterrizar en elextlib
Tuve el mismo problema y lo resolví de esta manera:
Si sabe dónde reside libpython, supuse que sería
/usr/local/lib/libpython2.7.so.1.0
en su caso, simplemente puede crear un enlace simbólico:Luego intente ejecutar
ldd
nuevamente y vea si funcionó.fuente
Instalé Python 3.5 de Software Collections en CentOS 7 minimal. Todo funcionó bien por sí solo, pero vi el error de biblioteca compartida mencionado en esta pregunta cuando intenté ejecutar un script CGI simple:
Quería una solución permanente para todo el sistema que funcionara para todos los usuarios, por lo que excluía agregar declaraciones de exportación a archivos .profile o .bashrc. Existe una solución de una línea, basada en la página de soluciones de Red Hat . Gracias por el comentario que lo señala:
Después de un reinicio, todo está bien en el shell, pero a veces mi servidor web todavía se queja. Hay otro enfoque que siempre funcionó tanto para el shell como para el servidor, y es más genérico. ¡Vi la solución aquí y luego me di cuenta de que en realidad también se menciona en una de las respuestas! De todos modos, en CentOS 7, estos son los pasos:
Que en mi máquina acaba de tener:
Entonces creé un nuevo archivo:
Y agregado:
Y para reconstruir manualmente el caché:
Eso es todo, ¡los guiones funcionan bien!
Esta fue una solución temporal, que no funcionó en los reinicios:
La opción -v (detallada) era solo para ver lo que estaba sucediendo. Vi que sí: / 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
Este error en particular desapareció. Por cierto, tuve que hacer que
chown
el usuario apache para deshacerse de un error de permiso después de eso.Tenga en cuenta que solía encontrar para ubicar el directorio de la biblioteca. También puedes hacer:
Que en mi VM devuelve:
Cuál es el camino que necesito dar a ldconfig, como se muestra arriba.
fuente
#!/bin/bash
ysource scl_source enable rh-python35
en él. access.redhat.com/solutions/527703En Solaris 11
Úselo
LD_LIBRARY_PATH_64
para resolver el enlace simbólico a las bibliotecas de Python.En mi caso para python3.6
LD_LIBRARY_PATH
no funcionó, pero loLD_LIBRARY_PATH_64
hizo.Espero que esto ayude.
Saludos
fuente
Esto funcionó para mí ...
fuente
Lo instalé usando el comando:
Ahora, como usuario root:
Luego intenté ejecutar python y obtuve el error:
Luego, me desconecté del usuario root y nuevamente intenté ejecutar Python y funcionó con éxito.
fuente
Todo lo que necesita es la instalación de los archivos de desarrollo libpython [3 o 2].
fuente
solo instala python-lib. (python27-lib). Instalará libpython2.7.so1.0. No necesitamos configurar nada manualmente.
fuente