Lor*_*ein 29 python linux swig openssl virtualenv
我正在尝试将Python M2Crypto软件包安装到x86_64 RHEL 6.1计算机上的virtualenv中.此进程调用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:
Run Code Online (Sandbox Code Playgroud)
我已经通过RedHat的RPM软件包安装了OpenSSL 1.0.0.
导致错误的/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
Run Code Online (Sandbox Code Playgroud)
gcc定义了正确的变量:
$ echo | gcc -E -dM - | grep x86_64
#define __x86_64 1
#define __x86_64__ 1
Run Code Online (Sandbox Code Playgroud)
但明显的swig没有,因为这是失败的线:
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -o \
SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
Run Code Online (Sandbox Code Playgroud)
有没有办法通过改变系统配置中的某些东西来解决这个问题?M2Crypto被安装在virtualenv中,作为我无法控制的更大脚本的一部分,所以避免使用M2Crypto文件,这将是一件好事.
小智 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
Run Code Online (Sandbox Code Playgroud)
这在我的安装过程中起作用
小智 10
你刚刚没有swig安装.
尝试:
sudo yum install swig
Run Code Online (Sandbox Code Playgroud)
然后:
sudo easy_install M2crypto
Run Code Online (Sandbox Code Playgroud)
我这样做了,效果很好:
env SWIG_FEATURES="-cpperraswarn -includeall -I/usr/include/openssl" pip install M2Crypto
Run Code Online (Sandbox Code Playgroud)
当然,你必须与安装swigg sudo yum install swig前
如果你看到这个并且在Ubuntu上,请使用apt-get而不是pip来避免这个问题.
apt-get install python-m2crypto
我有一个类似的问题在哪里/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27749 次 |
| 最近记录: |