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.
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
Vous n'avez simplement pas swig
installé.
Essayez:
Sudo yum install swig
Et puis:
Sudo easy_install M2crypto
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
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
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
Il y a un référentiel où fonctionne "pip install":
Sudo yum install m2crypto
travaillé pour moi pour contourner ce problème.
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.
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