2014-05-27

Scl, gnu-screen, flask y python 2.7

Update (2014-05-28): Quiero aclarar que si sólo instalo python y screen me muestra la versión de python 2.7 en el shell corriendo adentro del screen.

Arranco en AWS desde 0 con un AMI de un RHEL 6.5, RHEL-6.5_GA-x86_64-7-Hourly2 (ami-aa8bfe9a). Instalo python 2.7, screen, pip y flask usando pip.

$ sudo yum -y install python27
$ sudo yum -y install screen
$ sudo scl enable python27 "easy_install pip"
$ sudo scl enable python27 "pip install flask"

Activo un shell con python27 y corro python

$ scl enable python27 bash
$ python --version
Python 2.7.5

Y veo que configuró la carga de bibliotecas para cargar las libs de python 2.7.

$ echo $LD_LIBRARY_PATH

/opt/rh/python27/root/usr/lib64


Pero, si hago lo mismo en un screen:

$ scl enable python27 bash
$ python --version

python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

Y no tiene configurada la carga de bibliotecas para cargar las libs de python 2.7.

$ echo $LD_LIBRARY_PATH


(no aparece nada :-( )

¿Alguien sabe que está pasando? ¿Qué hice mal?

Happy hacking, 
Aureliano.

7 comentarios:

Mstaaravin dijo...

Tal vez deberías echarle una mirada a la documentación oficial de "SCL" donde dice:

http://storage6.static.itmages.com/i/14/0527/h_1401213606_8322708_5cec0d9804.png

Y el contenido de ese archivo es el siguiente...

http://storage7.static.itmages.com/i/14/0527/h_1401213511_9960036_212a59f22e.png

Por ende es un tema de variables de entorno...

Cómo cargues esos path a las variables de entorno, podés hacerlo haciendo un source o cargando los paths en tu .bashrc

Saludos

aurelianito dijo...

Mstaaravin.

Para evitar el problema de la pérdida de variables de entorno estoy invocando scl adentro del shell del screen (no afuera).

Si empezás de 0 y solo instalás python y screen, scl anda adentro del screen. El problema es que por algún motivo que no logro entender se rompe cuando instalo pip y flask.

Mstaaravin dijo...

Y cuando "se rompe" si ejecutás un env o export, ves los paths a /opt/rh en forma correcta...?

Por que es obvio que es un tema de variables de entorno nada mas, justamente es la ventaja de usa SCL, no importa si usás screen/tmux o cualquier otro siempre tenés que tener las variables de entorno cargadas

En mi opinión lo mejor es tener el contenido del archivo enable en el ~/.bashrc te olvidás

aurelianito dijo...

Poner el contenido de enable en el .bashrc de algunos usuarios es una buena idea :D. Lamentablemente no creo q solucione el problema q explico en el post, ya q es equivalente a correr scl enable adentro del screen.
Se te ocurre como puede ser q el egg de flask rompa scl enable adentro de un screen pero no afuera?

aurelianito dijo...

Me olvidé de contestar una parte, si hago echo $PATH adentro del shell q corre en el screen tiene el PATH consistente con correr scl enable python27 bash.

Mstaaravin dijo...

Sigo sin entender por qué es un problema, cargás las variables de entorno y listo...

aurelianito dijo...

El problema es que es un sistema que no hace lo que debería hacer. Si entendiera PORQUÉ no se setea la variable de entorno, y ese PORQUÉ fuera inocuo, la setería y listo.

Antes es meterse en quilombos grosos.