Подтвердить что ты не робот

M2Crypto не устанавливается в venv, или swig не определяет __x86_64__, который разбивается на OpenSSL

Я пытаюсь установить пакет Python M2Crypto в virtualenv на машине x86_64 RHEL 6.1. Этот процесс вызывает swig, который не выполняется со следующей ошибкой:

$ 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

gcc имеет правую переменную:

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

Но призрачный свинг не делает, так как это строка, которая не работает:

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

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

4b9b3361

Ответ 1

M2Crypto поставляет fedora_setup.sh script для решения проблем с релизами 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

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

Ответ 2

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

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

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

Ответ 3

У вас просто нет swig.

Попытка:

sudo yum install swig

И затем:

sudo easy_install M2crypto

Ответ 4

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

Ответ 5

У меня была аналогичная проблема, когда /usr/include/openssl отсутствовал opensslconf.h (источник 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

Ответ 7

sudo yum install m2crypto

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

Ответ 8

Я нашел новый способ исправить эту проблему в 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

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

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