2011-10-14 17 views
29

Sto provando ad installare il pacchetto Python M2Crypto in un virtualenv su una macchina x86_64 RHEL 6.1. Questo processo invoca sorso, che non riesce con il seguente errore:M2Crypto non si installa in venv, o swig non definisce __x86_64__ che rompe la compilazione con OpenSSL

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

Ho OpenSSL 1.0.0 installato tramite pacchetti RPM da RedHat.

La parte del /usr/include/openssl/opensslconf.h che causa l'errore si presenta in questo modo:

#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 ha la variabile definita destra:

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

Ma apparenty sorso doesn 't, dal momento che questa è la linea che è mancata:

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

c'è un modo per risolvere questo problema modificando som nella mia configurazione di sistema? M2Crypto viene installato in una virtualenv come parte di uno script più grande che non controllo, quindi evitare di andare in giro con i file M2Crypto sarebbe una buona cosa.

+0

C'è [ 'fedora_setup.sh'] (http://svn.osafoundation.org/m2crypto/trunk/fedora_setup.sh) ma richiede gingillarsi con la File M2Crypto. – jfs

+0

@ J.F.Sebastian: non è familiare, puoi fornire maggiori dettagli in una risposta completa? –

risposta

26

M2Crypto fornisce uno script fedora_setup.sh per gestire i problemi con le versioni di Fedora/RL/CentOs, ma pip, ovviamente, non ne sa nulla.

Dopo l'installazione del pip non riesce, lascia i file scaricati nella directory venv/build/M2Crypto. fare questo:

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

Ciò ha funzionato nel mio processo di installazione

+4

Ad oggi (versione 1.5.6) pip pulisce la directory di build, quindi non c'è più niente da fare in essa. – Peterino

5

Se state vedendo questo e sono su Ubuntu, utilizzare apt-get invece di pip per evitare questo problema.
apt-get install python-m2crypto

+2

Questo non funziona per gli ambienti virtuali. – Seth

3
sudo yum install m2crypto 

ha lavorato per me per aggirare questo problema.

+0

Sfortunatamente, questo non ha risolto il problema per me. –

4

C'è un archivio in cui "pip install" funziona:

https://github.com/martinpaljak/M2Crypto

+0

Si potrebbe provare questo: pip install git + https: //github.com/martinpaljak/M2Crypto.git Mentre sto pensando di concludere alcune modifiche a M2Crypto che stanno fluttuando in una nuova versione (s) che finirà su in pypi, puoi tranquillamente usare lo stesso git tree al momento. –

+1

"pip installa git + github.com/martinpaljak/M2Crypto.git" fallisce con "ValueError: ('Expected version spec in', 'git + github.com/martinpaljak/M2Crypto.git', 'at', '+ github .com/martinpaljak/M2Crypto.git ') "sul mio sistema Ubuntu 10.04. –

+0

La formattazione. Aggiungi https e due punti e barre di fronte a github.com –

8

Lei semplicemente non hanno swig installato.

Prova:

sudo yum install swig 

E poi:

sudo easy_install M2crypto 
+0

Su Mac OS X 10.9.4 ho installato swig usando MacPorts ('sudo port install swig'). Ho anche dovuto installare Python's markupsafe a livello globale ('sudo pip install markupsafe'), perché swig dipende da esso (' .../markupsafe/_speedups.so: Errore durante l'apertura o la lettura di file'). – Peterino

+0

Sembra che con MacPorts sia necessario installare anche swig-python ('sudo port install swig-python'). – Peterino

+0

Questo ha funzionato per me quando ho avuto un problema simile su Ubuntu (anche se ovviamente usando apt-get al posto di yum). – user3614014

2

ho trovato un nuovo modo per risolvere questo problema in centos5.8, provalo.

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 

poi python setup.py install funzionerà.

9

ho fatto questo e funziona molto bene:

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

naturalmente bisogna installare swigg con sudo yum install swig prima

0

Su FreeBSD ho dovuto installare anche Swig (la parte ovvia) (da sudo pkg install swig), ma l'eseguibile di Swig 2.0 è stato chiamato swig2.0 e gestisce swig ha generato command not found. Soluzione: link simbolico Swig 2.0 per gestire swig:

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