无法在OS X/macOS上使用pip安装m2crypto

use*_*692 46 macos pip m2crypto osx-elcapitan macos-sierra

pip install m2crypto
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

building 'M2Crypto.__m2crypto' extension
swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
swig -python -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/usr/include -I/usr/include/openssl -includeall -modern -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
SWIG/_m2crypto.i:30: Error: Unable to find 'openssl/opensslv.h'
SWIG/_m2crypto.i:33: Error: Unable to find 'openssl/safestack.h'
SWIG/_evp.i:12: Error: Unable to find 'openssl/opensslconf.h'
SWIG/_ec.i:7: Error: Unable to find 'openssl/opensslconf.h'
error: command 'swig' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

我跑了:

brew install swig
Run Code Online (Sandbox Code Playgroud)

the*_*arv 156

我想要一个更好的方法,无需手动安装并仅使用Homebrew(默认情况下也不会链接openssl).使用pip也是一项要求.这似乎适用于最新的m2crypto 0.22.5.我也用m2crypto 0.22.3测试了一次,似乎也可以工作.这里的OpenSSL版本是1.0.2d:

brew install openssl
brew install swig
Run Code Online (Sandbox Code Playgroud)

最后在Bash中的 macOS上安装m2crypto .这是一个很长的命令,但它只在更改SWIG和clang环境变量时才pip install会使m2crypto获得所有OpenSSL要求:

env LDFLAGS="-L$(brew --prefix openssl)/lib" \
CFLAGS="-I$(brew --prefix openssl)/include" \
SWIG_FEATURES="-cpperraswarn -includeall -I$(brew --prefix openssl)/include" \
pip install m2crypto
Run Code Online (Sandbox Code Playgroud)

顺便说一句.如果您使用例如requirements.txt,则最后一个命令也可以.

更新:
还添加了对fish shell用户的命令...

env LDFLAGS="-L"(brew --prefix openssl)"/lib" \
CFLAGS="-I"(brew --prefix openssl)"/include" \
SWIG_FEATURES="-cpperraswarn -includeall -I"(brew --prefix openssl)"/include" \
pip install m2crypto
Run Code Online (Sandbox Code Playgroud)


小智 9

感谢therealmarv env标志我能够使用openssl/swig的macports版本,这就是我做的:

sudo port install openssl
sudo port install swig
sudo port install swig-python
Run Code Online (Sandbox Code Playgroud)

然后使用therealmarv行,但用来自macports的dir替换"$(brew --prefix openssl)",这应该是"/ opt/local"

sudo env LDFLAGS="-L/opt/local/lib" \
CFLAGS="-I/opt/local/include" \
SWIG_FEATURES="-cpperraswarn -includeall -I/opt/local/include" \
pip install M2Crypto
Run Code Online (Sandbox Code Playgroud)


joe*_*ere 5

为了让这个在 El Capitan 发挥作用,我经历了很多痛苦。这是我必须做的:

安装OpenSSL(必须使用旧版本,否则m2crypto将无法编译)

curl -O https://www.openssl.org/source/openssl-0.9.8zg.tar.gz
tar -xvzf openssl-0.9.8zg.tar.gz
cd openssl-0.9.8zg
./Configure --prefix=/usr/local darwin64-x86_64-cc
make && make test
sudo make install
Run Code Online (Sandbox Code Playgroud)

安装 m2crypto

git clone https://github.com/martinpaljak/M2Crypto.git    
cd M2Crypto
python setup.py build build_ext --openssl=/usr/local
sudo python setup.py install build_ext --openssl=/usr/local
Run Code Online (Sandbox Code Playgroud)

AFAIK 它已安装...但我仍然需要做一些测试。

  • `python setup.py build build_ext --openssl=/usr/local/opt/openssl` `sudo python setup.py install build_ext --openssl=/usr/local/opt/openssl` 对我有用 (2认同)