web-dev-qa-db-fra.com

M2Crypto ne s'installe pas dans venv, ou swig ne définit pas __x86_64__ qui interrompt la compilation avec OpenSSL

J'essaie d'installer le package Python M2Crypto dans un virtualenv sur une machine x86_64 RHEL 6.1. Ce processus appelle swig, qui échoue avec l'erreur suivante:

$ 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:

J'ai OpenSSL 1.0.0 installé via les packages RPM de RedHat.

La partie de /usr/include/openssl/opensslconf.h qui provoque l'erreur ressemble à ceci:

#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 a la bonne variable définie:

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

Mais apparenty swig ne fonctionne pas, car c'est la ligne qui échoue:

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

Existe-t-il un moyen de résoudre ce problème en modifiant quelque chose dans la configuration de mon système? M2Crypto est installé dans un virtualenv dans le cadre d'un script plus large que je ne contrôle pas, donc éviter de contourner les fichiers M2Crypto serait une bonne chose.

29
Lorin Hochstein

M2Crypto fournit un script Fedora_setup.sh pour gérer les problèmes avec les versions de Fedora/RL/CentOs, mais pip, bien sûr, n'en sait rien.

Après l'échec de l'installation de pip, il laisse les éléments téléchargés dans le répertoire venv/build/M2Crypto. faites ceci:

cd <path-to-your-venv>/venv/build/M2Crypto
chmod u+x Fedora_setup.sh
./Fedora_setup.sh build
./Fedora_setup.sh install

Cela a fonctionné dans mon processus d'installation

26
Pamela McA'Nulty

Vous n'avez simplement pas swig installé.

Essayez:

Sudo yum install swig

Et puis:

Sudo easy_install M2crypto
10
LeoC

Je l'ai fait et cela fonctionne très bien:

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

Bien sûr, vous devez installer swigg avec Sudo yum install swig avant

9
chocobn69

Si vous voyez cela et êtes sur Ubuntu, utilisez apt-get au lieu de pip pour éviter ce problème.
apt-get install python-m2crypto

5
nknj

J'ai eu un problème similaire où /usr/include/openssl manquait opensslconf.h (source https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733644#1 )

Sudo ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl
5
evendiagram

Il y a un référentiel où fonctionne "pip install":

https://github.com/martinpaljak/M2Crypto

4
Martin Paljak
Sudo yum install m2crypto

travaillé pour moi pour contourner ce problème.

3
Matt

J'ai trouvé une nouvelle façon de résoudre ce problème dans centos5.8, essayez-le.

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

puis python setup.py install marchera.

2
hahakubile

Sur FreeBSD, je devais également installer Swig (la partie évidente) (par Sudo pkg install swig), mais l'exécutable Swig 2.0 a été nommé swig2.0 et le handle swig ont généré command not found. Lösung: symlink Swig 2.0 pour manipuler swig:

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