18

Ubuntu で python の virtualenv を使用してシステム パッケージなしで仮想環境を作成し、m2crypto をインストールしましたが、シェルを実行して M2Crypto をインポートしようとすると、次のエラーが発生します。

ImportError: /home/imediava/.virtualenvs/myenv/local/lib/python2.7/site-          
packages/M2Crypto/__m2crypto.so: undefined symbol: SSLv2_method

ubuntuからapt-getでpython-m2cryptoをインストールしない限り、環境の外から同じ問題に遭遇します。システム パッケージを使用して環境を作成できることはわかっていますが、作成したくありません。

システムパッケージなしで仮想環境を作成し、SSLv2_method を実行せずに pip で m2crypto をインストールできる方法はありますか?

4

5 に答える 5

31

M2Crypto の以前のバージョンからの回帰バグがあるようです。

M2Crypto のソースを virtualenvに配置した後、以下のdiffコードでパッチ を当てることができます。

これを行うには、ソース コードをダウンロードし、次の方法で解凍します。 tar -xzf M2Crypto-0.21.1.tar.gz

これにより、ディレクトリM2Crypto-0.21.1を含むSWIGディレクトリが作成されます

に、パッチを適用するファイルがありますSWIG_ssl.i同じディレクトリ_ssl.i.patchに、たとえばnanoエディターを使用してという名前のファイルを作成し、以下にリストされている完全な diff コードをそのファイルに貼り付けます。

次にpatch _ssl.i _ssl.i.patch、パッチをコードにマージするコマンドを発行します。(その後、必要に応じてパッチ ファイルを削除できます。)

最後に次のコマンドを発行します。

python setup.py build

に続く:

python setup.py install

手動でインストールします。

差分コード:

--- SWIG/_ssl.i 2011-01-15 20:10:06.000000000 +0100
+++ SWIG/_ssl.i 2012-06-17 17:39:05.292769292 +0200
@@ -48,8 +48,10 @@
 %rename(ssl_get_alert_desc_v) SSL_alert_desc_string_long;
 extern const char *SSL_alert_desc_string_long(int);

+#ifndef OPENSSL_NO_SSL2
 %rename(sslv2_method) SSLv2_method;
 extern SSL_METHOD *SSLv2_method(void);
+#endif
 %rename(sslv3_method) SSLv3_method;
 extern SSL_METHOD *SSLv3_method(void);
 %rename(sslv23_method) SSLv23_method;
于 2012-06-17T15:55:16.807 に答える
15

この lib をグローバル環境にインストールしてから、グローバル サイト パッケージから virtualenv にコピーするだけです。

于 2012-05-11T08:18:51.980 に答える
2

現在のリリース(M2Crypto-0.22.5)でも同じ問題がありました。最新のRCビルドはうまくいきました。

pip install M2Crypto==0.22.6rc4
于 2015-12-30T02:49:50.680 に答える