M2Crypto no se instala en venv, o swig no define __x86_64__ que rompe la comstackción contra OpenSSL

Estoy intentando instalar el paquete Python M2Crypto en un virtualenv en una máquina x86_64 RHEL 6.1. Este proceso invoca swig, que falla con el siguiente error:

$ virtualenv -q --no-site-packages venv $ pip install -E venv M2Crypto==0.20.2 Downloading/unpacking M2Crypto==0.20.2 Downloading M2Crypto-0.20.2.tar.gz (412Kb): 412Kb downloaded Running setup.py egg_info for package M2Crypto Installing collected packages: M2Crypto Running setup.py install for M2Crypto building 'M2Crypto.__m2crypto' extension swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c swig -python -I/usr/include/python2.6 -I/usr/include -includeall -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i /usr/include/openssl/opensslconf.h:31: Error: CPP #error ""This openssl-devel package does not work your architecture?"". Use the -cpperraswarn option to continue swig processing. error: command 'swig' failed with exit status 1 Complete output from command /home/lorin/venv/bin/python -c "import setuptools;__file__='/home/lorin/venv/build/M2Crypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-BFiNtU-record/install-record.txt --install-headers /home/lorin/venv/include/site/python2.6: 

Tengo OpenSSL 1.0.0 instalado a través de paquetes RPM de RedHat.

La parte de /usr/include/openssl/opensslconf.h que causa el error se ve así:

 #if defined(__i386__) #include "opensslconf-i386.h" #elif defined(__ia64__) #include "opensslconf-ia64.h" #elif defined(__powerpc64__) #include "opensslconf-ppc64.h" #elif defined(__powerpc__) #include "opensslconf-ppc.h" #elif defined(__s390x__) #include "opensslconf-s390x.h" #elif defined(__s390__) #include "opensslconf-s390.h" #elif defined(__sparc__) && defined(__arch64__) #include "opensslconf-sparc64.h" #elif defined(__sparc__) #include "opensslconf-sparc.h" #elif defined(__x86_64__) #include "opensslconf-x86_64.h" #else #error "This openssl-devel package does not work your architecture?" #endif 

gcc tiene la variable correcta definida:

 $ echo | gcc -E -dM - | grep x86_64 #define __x86_64 1 #define __x86_64__ 1 

Pero el gulp aparente no lo hace, ya que esta es la línea que está fallando:

 swig -python -I/usr/include/python2.6 -I/usr/include -includeall -o \ SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i 

¿Hay alguna manera de solucionar este problema cambiando algo en la configuración de mi sistema? M2Crypto se instala en un virtualenv como parte de una secuencia de comandos más grande que no controlo, por lo que sería bueno evitar meterse con los archivos M2Crypto.

M2Crypto suministra un script fedora_setup.sh para manejar los problemas con los lanzamientos de Fedora / RL / CentOs, pero pip, por supuesto, no sabe nada al respecto.

Después de que la instalación pip falla, deja las cosas descargadas en el directorio venv / build / M2Crypto. hacer esto:

 cd /venv/build/M2Crypto chmod u+x fedora_setup.sh ./fedora_setup.sh build ./fedora_setup.sh install 

Esto ha funcionado en mi proceso de instalación.

Hice esto y funciona muy bien:

 env SWIG_FEATURES="-cpperraswarn -includeall -I/usr/include/openssl" pip install M2Crypto 

Por supuesto, debes instalar swigg con sudo yum install swig antes

Simplemente no tienes instalado un swig .

Tratar:

 sudo yum install swig 

Y entonces:

 sudo easy_install M2crypto 

Si está viendo esto y está en Ubuntu, use apt-get en lugar de pip para evitar este problema.
apt-get install python-m2crypto

Tuve un problema similar en el que faltaba /usr/include/openssl opensslconf.h (fuente https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733644#10 )

 sudo ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl 

Hay un repository donde funciona “pip install”:

https://github.com/martinpaljak/M2Crypto

 sudo yum install m2crypto 

Trabajó para mí para solucionar este problema.

Encontré una nueva forma de solucionar este problema en centos5.8, inténtalo.

vim setup.py

 def finalize_options(self): ... self.swig_opts.append('-includeall') # after this line self.swig_opts.append('-I/usr/include/openssl') # add here 

entonces la instalación de python setup.py install funcionará.

En FreeBSD también tuve que instalar Swig (la parte obvia) (por sudo pkg install swig ), pero el ejecutable de Swig 2.0 se llamaba swig2.0 y el swig2.0 dio como resultado que command not found . Solución: symlink Swig 2.0 para manejar swig :

 ln -s /usr/local/bin/swig2.0 /usr/local/bin/swig