安裝m2crypto報錯swig error : Unrecognized option -builtin


M2Crypto 是最完整的為 Python 包裝 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,對稱密碼算法(包括AES)的一個庫工具。
而自從 M2Crypto 升級到版本 0.22.5 后,用 pip install M2Crypto 命令來安裝 M2Crypto 時總是會失敗。
在沒有升級到此版本之前,使用 pip 安裝則是沒有問題的。下面來找找原因。
系統環境:CentOS 6.7 x86
失敗關鍵字:swig

 

失敗現象:

swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
swig error : Unrecognized option -builtin
Use 'swig -help' for available options.
error: command 'swig' failed with exit status 1

這里有個最為明顯的錯誤提示:
swig error : Unrecognized option -builtin

這說明,系統里安裝的 swig 是沒有 -builtin 這個選項的。來看看系統裝的 swig 版本。
rpm -qa | grep swig
返回:
swig-1.3.40-6.el6.i686
是不是版本比較舊的緣故導致的呢?再來看看 swig 的幫助。
swig -help
看到其中有:
Note: ‘swig -<lang> -help’ displays options for a specific target language.
因為是涉及到 Python,換個命令來看看。
swig -python -help
返回(節選):
-buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
注意其中的 options,果然是沒有 -builtin 這個選項的。

好吧很明顯,安裝 M2Crypto 所依賴的 swig 版本升級了,而 CentOS 默認的 swig 版本過低了。
下面來升級 swig 版本。官網最新版已經到了 3.0.7 了,就編譯安裝此版本的。

wget -O swig-3.0.7.tar.gz http://prdownloads.sourceforge.net/swig/swig-3.0.7.tar.gz
tar zxf swig-3.0.7.tar.gz
cd swig-3.0.7
./configure --prefix=/usr
make && make install

安裝完成后,再來看一下版本號。
swig -version
返回:
SWIG Version 3.0.7

至此,升級 swig 完成。再來看看新版本的 swig 到底有沒有 -builtin 這個選項。
swig -python -help
返回(節選):
-buildnone      – Use Py_BuildValue() to obtain Py_None (default in Windows)
-builtin        – Create new python built-in types, rather than proxy classes, for better performance

果然如此。既然如此,那趕緊繼續用 pip 安裝 M2Crypto 吧。
pip install M2Crypto

Boom,又出錯了。錯誤信息如下:

swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -I/usr/include/python2.6 -I/usr/include -includeall -modern -builtin -outdir build/lib.linux-i686-2.6/M2Crypto -D__i386__ -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
/usr/include/openssl/opensslconf.h:13: Error: Unable to find 'opensslconf-i386.h'
error: command 'swig' failed with exit status 1

原因是什么呢?M2Crypto 沒找到 openssl 的頭文件 opensslconf-i386.h
如果是在 x86_64 下安裝的話,會找不到 opensslconf-x86_64.h

怎么辦呢?看來是不能通過 pip 來安裝了,那我們手動來。

wget --no-check-certificate -O M2Crypto-0.22.5.tar.gz https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.22.5.tar.gz
tar zxf M2Crypto-0.22.5.tar.gz
cd M2Crypto-0.22.5
cp /usr/include/openssl/opensslconf-i386.h ./  #手動把頭文件復制過來(適用於x86)
cp /usr/include/openssl/opensslconf-x86_64.h ./  #手動把頭文件復制過來(適用於x86_64)
python setup.py install

好了,這下終於安裝完成了。看看成果:
pip list | grep M2Crypto
返回:
M2Crypto (0.22.5)

后來我去到 M2Crypto 的官網去看了下,已經有人跟作者反映了這個事情。
https://gitlab.com/m2crypto/m2crypto/issues/69
希望作者能在下個版本改進吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM