¿Por qué no puedo hacer que `pip install lxml` funcione dentro de un virtualenv?

Nota: estoy usando virtualenvwrapper.

Antes de activar el entorno virtual:

$ pip install lxml Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages Cleaning up... 

Después de activar el entorno virtual:

 (test-env)$ pip install lxml force/build/lxml/src/lxml/includes/etree_defs.h:9:31: fatal error: libxml/xmlversion.h: No such file or directory comstacktion terminated. error: command 'gcc' failed with exit status 1 ---------------------------------------- Command /home/chaz/dev/envs/test-with-system-python-force/bin/python2 .7 -c "import setuptools;__file__='/home/chaz/dev/envs/test-with- system-python-force/build/lxml/setup.py';exec(compile(open(__file__). read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-bJ6Q_B-record/install-record.txt --single-version-externally -managed --install-headers /home/chaz/dev/envs/test-env/include/site/python2.7 failed with error code 1 in /home/chaz/dev/envs/test-env/build/lxml Storing complete log in /home/chaz/.pip/pip.log 

Probablemente ya tenga lxml instalado en su sistema, tal vez instalado debido a un paquete del sistema. Por lo tanto, el primer bash ( pip install lxml sin un virtualenv activo) no falla, pero tampoco lo instala; Realmente no hace nada.

En un virtualenv, de forma predeterminada, los paquetes del sistema se ignoran. Por lo tanto, pip piensa que lxml no está instalado. Por lo tanto, intenta instalarlo en tu entorno virtual.

lxml contiene módulos C que deben comstackrse para instalarse correctamente. Sin embargo, la comstackción de esos módulos C se basa en que usted también tiene algunas “bibliotecas de desarrollo” instaladas. Estas bibliotecas de desarrollo son bibliotecas C, no Python, y como tal pip no podrá obtenerlas automáticamente de Internet e instalarlas por usted.

Por lo tanto, deberá instalar estas bibliotecas de desarrollo por su cuenta, probablemente utilizando su administrador de paquetes. En un sistema Debian (como Ubuntu), esto es …

 apt-get install libxml2-dev libxslt-dev 

Esto instalará las bibliotecas de desarrollo libxml2 y libxslt en su sistema local. Si vuelve a intentar instalar lxml, el paso de comstackción del módulo C debería funcionar porque ahora estas bibliotecas de desarrollo están en su sistema.

El mensaje de error que estaba recibiendo se debía al hecho de que faltaban estas bibliotecas ( libxml/xmlversion.h: No such file or directory parte del mensaje de error).

Vea también: Cómo instalar lxml en Ubuntu

Para usuarios de centos: al obtener:

error: el comando ‘gcc’ falló con el estado de salida 1

HACER:

 sudo yum install libxslt-devel libxml2-devel 

Si tiene instalado lxml a nivel del sistema y desea lxml a un virtualenv que no creó con --system-site-packages , puede enlazarlo a la carpeta dist-packages su virtualenv .

Fuera de tu virtualenv , en un shell de python:

 import lxml print lxml.__file__ 

En mi caso, se encuentra en /usr/lib/python2.7/dist-packages . Habrá una carpeta lxml y un archivo de información de huevo. Donde sea que esté su virtualenv, vaya a su carpeta /lib/python-xy/dist-packages (puede que tenga que crear dist-packages ), y vincule la carpeta de la biblioteca y el egg en ella.

Lo más probable es que estés buscando esto: se requiere Microsoft Visual C ++ 14.0 (no se puede encontrar vcvarsall.bat)

Busque el sitio web de Visual Studio y vaya a: “Herramientas para Visual Studio” en la parte inferior, expándalo haciendo clic. Seleccione Descargar junto a “Crear herramientas para Visual Studio 2017” en la parte superior.