2011-05-12 12 views
5

Solo necesito algunos paquetes que no se presentan en la máquina host (y yo y Linux ... nosotros ... no pasamos mucho tiempo juntos ...).¿Cómo instalar lxml para python sin derechos administrativos en Linux?

he usado para instalarlos como:

# from the source 
python setup.py install --user 

o

# with easy_install 
easy_install prefix=~/.local package 

Pero no funciona con lxml. Tengo un montón de errores durante la compilación:

x:~/lxml-2.3$ python setup.py build 
Building lxml version 2.3. 
Building without Cython. 
ERROR: /bin/sh: xslt-config: command not found 

** make sure the development packages of libxml2 and libxslt are installed ** 

Using build configuration of libxslt 
running build 
running build_py 
running build_ext 
building 'lxml.etree' extension 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c src/lxml/lxml.etree.c -o build/temp.linux-i686-2.6/src/lxml/lxml.etree.o -w 
In file included from src/lxml/lxml.etree.c:227: 
src/lxml/etree_defs.h:9:31: error: libxml/xmlversion.h: No such file or directory 
src/lxml/etree_defs.h:11:4: error: #error the development package of libxml2 (header files etc.) is not installed correctly 
src/lxml/etree_defs.h:13:32: error: libxslt/xsltconfig.h: No such file or directory 
src/lxml/etree_defs.h:15:4: error: #error the development package of libxslt (header files etc.) is not installed correctly 
src/lxml/lxml.etree.c:230:29: error: libxml/encoding.h: No such file or directory 
src/lxml/lxml.etree.c:231:28: error: libxml/chvalid.h: No such file or directory 
src/lxml/lxml.etree.c:232:25: error: libxml/hash.h: No such file or directory 
... 
src/lxml/lxml.etree.c:55179: error: Б─≤xmlNodeБ─≥ undeclared (first use in this function) 
src/lxml/lxml.etree.c:55179: error: Б─≤__pyx_v_c_nodeБ─≥ undeclared (first use in this function) 
src/lxml/lxml.etree.c:55184: error: Б─≤_node_to_node_functionБ─≥ undeclared (first use in this function) 
src/lxml/lxml.etree.c:55184: error: expected Б─≤;Б─≥ before Б─≤__pyx_v_next_elementБ─≥ 
src/lxml/lxml.etree.c:55251: error: Б─≤struct __pyx_obj_4lxml_5etree__ReadOnlyProxyБ─≥ has no member named Б─≤_c_nodeБ─≥ 
... 

http://lxml.de/installation.html dice que tiene algunas dependencias. ¿Pero cómo instalarlos sin derechos administrativos?

+0

¿Has probado esto en virtualenv? – karantan

Respuesta

12

Si no tiene derechos de administrador, y no puede convencer al administrador para instalar los paquetes relevantes para usted, usted tiene dos opciones:

Opción 1 - Descarga de fuentes de libxml2 and libxslt y compilar e instalar debajo de su $HOME en algún lugar, luego construya python-lxml contra esas copias.

Este es un ejemplo bastante complicado, ya que si te faltan dependencias adicionales podrías estar descargando/compilando durante mucho tiempo.

Opción 2 - Descargue los paquetes binarios para la misma distribución de Linux que se utiliza en su servidor, y extraiga los contenidos en su directorio de inicio.

Por ejemplo, si se está ejecutando Ubuntu Lucid, que te enteraste de la versión de su sistema operativo está utilizando para luego descargar los paquetes que se está perdiendo:

% uname -m 
x86_64 
% aptitude show libxml2 | grep Version 
Version: 2.7.6.dfsg-1ubuntu1.1 

Siguiente descargar los paquetes que necesita directo desde el servidor de Ubuntu:

% mkdir root ; cd root 
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/libx/libxml2/libxml2_2.7.6.dfsg-1ubuntu1.1_amd64.deb 
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/libx/libxslt/libxslt1.1_1.1.26-6build1_amd64.deb 
% wget http://us.archive.ubuntu.com/ubuntu/pool/main/l/lxml/python-lxml_2.2.4-1_amd64.deb 

extraer el contenido y combinar la lxml código nativo y puro pitón y mover las bibliotecas compartidas a la parte superior, a continuación, quitar el contenido extraído:

% dpkg-deb -x libxml2_2.7.6.dfsg-1ubuntu1.1_amd64.deb . 
% dpkg-deb -x libxslt1.1_1.1.26-6build1_amd64.deb . 
% dpkg-deb -x python-lxml_2.2.4-1_amd64.deb . 
% mv ./usr/lib/python2.6/dist-packages/lxml . 
% mv ./usr/share/pyshared/lxml/* lxml 
% mv ./usr/lib . 
% rm *.deb 
% rm -rf usr 

Finalmente, para usar esos archivos, necesita configurar las variables de entorno LD_LIBRARY_PATH y PYTHONPATH para que apunten al $HOME/root. Colocarlos en su ~/.bashrc (o equivalente) por lo que son permanentes:

% export LD_LIBRARY_PATH=$HOME/root/lib 
% export PYTHONPATH=$HOME/root 

Puede comprobar que los objetos compartidos se encuentran utilizando ldd (si está instalado):

% ldd $HOME/root/lxml/etree.so | grep $HOME 
libxslt.so.1 => /home/user/root/lib/libxslt.so.1 (0x00007ff9b1f0f000) 
libexslt.so.0 => /home/user/root/lib/libexslt.so.0 (0x00007ff9b1cfa000) 
libxml2.so.2 => /home/user/root/lib/libxml2.so.2 (0x00007ff9b19a9000) 

Entonces estás listo para probar Python:

% python 
>>> from lxml import etree 
+0

Estoy en Debian. Gracias, lo intentaré. – CSZ

+0

Funciona, gracias de nuevo por la descripción detallada. – CSZ

+0

¡Genial para escucharlo, buena suerte con su aplicación! – samplebias

Cuestiones relacionadas