#python #linux #openssl #swig #virtualenv
#python #linux #openssl #swig #virtualenv
Вопрос:
Я пытаюсь установить пакет 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('rn', '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__) amp;amp; 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 этого не делает, поскольку это строка, которая терпит неудачу:
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -o
SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
Есть ли способ исправить это, изменив что-то в конфигурации моей системы? M2Crypto устанавливается в virtualenv как часть более крупного скрипта, который я не контролирую, поэтому было бы неплохо избежать возни с файлами M2Crypto.
Комментарии:
1. Есть
fedora_setup.sh
, но для этого требуется возиться с файлами M2Crypto.2. @J.F.Себастьян: Не знаком с этим, можете ли вы предоставить более подробную информацию в полном ответе?
Ответ №1:
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
Это сработало в моем процессе установки
Комментарии:
1. На сегодняшний день (версия 1.5.6) pip очищает каталог сборки, поэтому там больше нечего делать.
Ответ №2:
Вы просто не swig
установили.
Попробуйте:
sudo yum install swig
И затем:
sudo easy_install M2crypto
Комментарии:
1. В Mac OS X 10.9.4 я установил swig с помощью MacPorts (
sudo port install swig
). Мне также пришлось установить markupsafe для Python глобально (sudo pip install markupsafe
), потому что swig зависит от него (.../markupsafe/_speedups.so: Error opening or reading file
) .2. Похоже, что с MacPorts нам также нужно установить swig-python (
sudo port install swig-python
) .3. Это сработало для меня, когда у меня была аналогичная проблема в Ubuntu (хотя, конечно, с использованием apt-get вместо yum).
Ответ №3:
Я сделал это, и это работает очень хорошо :
env SWIG_FEATURES="-cpperraswarn -includeall -I/usr/include/openssl" pip install M2Crypto
Конечно, вы должны установить swigg с sudo yum install swig
помощью before
Ответ №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
Ответ №6:
Есть репозиторий, в котором работает «pip install»:
Комментарии:
1. Вы можете попробовать это: pip install git github.com/martinpaljak/M2Crypto.git Поскольку я планирую внести некоторые изменения в M2Crypto, которые распространяются в новых версиях, которые в конечном итоге появятся в pypi, вы можете безопасно использовать то же самое дерево git в данный момент.
2. «pip install git github.com/martinpaljak/M2Crypto.git » сбой с «ValueError: (‘Ожидаемая спецификация версии в’, ‘git github.com/martinpaljak/M2Crypto.git ‘, ‘в’, ‘ github.com/martinpaljak/M2Crypto.git ‘)» в моей системе Ubuntu 10.04.
3. форматирования. Добавьте https и двоеточия и косые черты перед github.com
4. Спасибо за это, это в высшей степени полезно для поддержания нашего процесса сборки в норме.
5. Это не работает для виртуальной среды в Ubuntu.
Ответ №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 (очевидная часть) (by 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
Ответ №10:
Похоже, что проблема заключается в отсутствии swig, как сказал @LeoC.
Для тех, кто работает на macOS, я бы рекомендовал загрузить swig через менеджер пакетов, такой как homebrew, потому что он чище.
Т.е. вы бы запустили
brew install swig