2011-10-14 3 views
29

Я пытаюсь установить пакет Python M2Crypto в virtualenv на машине x86_64 RHEL 6.1. Этот процесс вызывает глотнул, который выдает следующее сообщение об ошибке:M2Crypto не устанавливает в venv, или swig не определяет __x86_64__, который разбивается на 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: 

У меня OpenSSL 1.0.0 установлен с помощью пакетов RPM от RedHat.

Часть /usr/include/openssl/opensslconf.h, которая вызывает ошибку выглядит следующим образом:

#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 

НКУ имеет право переменную, определенную:

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

Но apparenty Swig Безразлично 't, так как это линия, которая не работает:

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

Есть ли способ исправить это, изменив som Что-то в моей конфигурации системы? M2Crypto устанавливается в virtualenv как часть более крупного сценария, который я не контролирую, поэтому избегать обмана с файлами M2Crypto было бы неплохо.

+0

Существует [ 'fedora_setup.sh'] (http://svn.osafoundation.org/m2crypto/trunk/fedora_setup.sh), но это требует отводом вокруг с Файлы M2Crypto. – jfs

+0

@ J.F.Sebastian: Не знаком с этим, можете ли вы предоставить более подробную информацию в полном ответе? –

ответ

26

M2Crypto поставляет скрипт fedora_setup.sh для решения проблем с версиями Fedora/RL/CentOs, но pip, конечно, ничего об этом не знает.

После того, как установка pip завершилась неудачно, она покинет загруженные файлы в каталоге venv/build/M2Crypto. сделать это:

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

Это работало в моем процессе установки

+4

На сегодняшний день (версия 1.5.6) pip очищает каталог сборки, поэтому в нем больше нечего делать. – Peterino

5

Если вы видите это и на Ubuntu, используйте APT-получить вместо пип, чтобы избежать этой проблемы.
apt-get install python-m2crypto

+2

Это не работает для виртуальных сред. – Seth

3
sudo yum install m2crypto 

работал для меня, чтобы обойти эту проблему.

+0

К сожалению, это не решило проблему для меня. –

4

Там в хранилище, где "пункт установить" работает:

https://github.com/martinpaljak/M2Crypto

+0

Вы можете попробовать: pip install git + https: //github.com/martinpaljak/M2Crypto.git Поскольку я планирую завершить некоторые изменения в M2Crypto, которые плавают в новых выпусках, которые заканчиваются в pypi, вы можете смело использовать одно и то же дерево git в настоящий момент. –

+1

«pip install git + github.com/martinpaljak/M2Crypto.git» не работает с «ValueError: (« Ожидаемая версия спецификации в »,« git + github.com/martinpaljak/M2Crypto.git »,« at »,« + github » .com/martinpaljak/M2Crypto.git ') "на моей системе Ubuntu 10.04. –

+0

Форматирование. Добавляйте https и двоеточия и косые черты перед github.com. –

8

Вы просто не swig установлен.

Try:

sudo yum install swig 

И потом:

sudo easy_install M2crypto 
+0

В Mac OS X 10.9.4 я установил swig с помощью MacPorts ('sudo port install swig'). Мне также пришлось установить markupsafe Python во всем мире ('sudo pip install markupsafe'), потому что swig зависит от него (' .../markupsafe/_speedups.so: Ошибка открытия или чтения файла'). – Peterino

+0

Похоже, что с MacPorts нам также нужно установить swig-python ('sudo port install swig-python'). – Peterino

+0

Это работало для меня, когда у меня была аналогичная проблема с Ubuntu (хотя, конечно, с использованием apt-get вместо yum). – user3614014

2

Я нашел новый способ, чтобы исправить эту проблему в centos5.8, попробуйте.

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 

затем python setup.py install будет работать.

9

Я сделал это, и она работает очень хорошо:

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

Конечно, вы должны установить swigg с sudo yum install swig до

0

На FreeBSD мне также пришлось установить Swig (очевидную часть) (по sudo pkg install swig), но исполняемый файл Swig 2.0 был назван swig2.0 и обработал swig в результате command not found. Решение: символическая Swig 2,0 обрабатывать swig:

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