web-dev-qa-db-ja.com

M2Cryptoがvenvにインストールされない、またはswigが__SSL_____を定義しておらず、OpenSSLに対するコンパイルが機能しない

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:

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

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にインストールされるため、M2Cryptoファイルをいじり回さないようにするのは良いことです。

29
Lorin Hochstein

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

これは私のインストールプロセスで機能しました

26

swigがインストールされていないだけです。

試してみる

Sudo yum install swig

それから:

Sudo easy_install M2crypto
10
LeoC

私はこれを行い、それは非常にうまく機能します:

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

もちろん、前にSudo yum install swigでswiggをインストールする必要があります

9
chocobn69

これが表示されていてUbuntuを使用している場合は、pipの代わりにapt-getを使用してこの問題を回避します。
apt-get install python-m2crypto

5
nknj

私は/usr/include/opensslがありませんopensslconf.h(ソース https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=733644#1

Sudo ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl
5
evendiagram

「pip install」が機能するリポジトリがあります。

https://github.com/martinpaljak/M2Crypto

4
Martin Paljak
Sudo yum install m2crypto

この問題を回避するために私のために働いた。

3
Matt

この問題を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 動作します。

2
hahakubile

FreeBSDでは、Swig(明白な部分)も(Sudo pkg install swigによって)インストールする必要がありましたが、Swig 2.0実行可能ファイルはswig2.0という名前で、ハンドルswigcommand not foundとなりました。解決策:swigを処理するためのSwig 2.0シンボリックリンク:

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