在OS X / macOS上使用pip安装m2crypto出现问题

51
pip install m2crypto

生成以下输出:

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

我已经跑了:

brew install swig
7个回答

178

我希望有一种更好的方法,而不需要手动安装,只使用Homebrew (默认情况下也不链接openssl)。同时,这需要使用pip。最新的m2crypto 0.22.5似乎可以使用。我还测试过m2crypto 0.22.3,看起来也可以正常工作。这里使用的OpenSSL版本是1.0.2d:

brew install openssl
brew install swig

最后在Bash中安装m2crypto。 这是一个很长的命令,但它仅在pip install期间更改SWIG和clang环境变量,以便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

顺便提一下,如果您使用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

1
+1 真的很喜欢这种方法,我可以将其与递归依赖项安装脚本一起使用,而且它非常好用。 - aorcsik
运行得非常好 :-) - Abhishek Jaiswal

11

多亏了 therealmarv 的环境变量标志,我成功地将其与 MacPorts 版本的 openssl/swig 配合使用,这是我所做的:

sudo port install openssl
sudo port install swig
sudo port install swig-python

然后使用therealmarv的代码行,但将"$(brew --prefix openssl)"替换为来自MacPorts的目录,应该是"/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

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

安装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

据我所知,它已经安装好了...不过我还需要进行一些测试。

此外,这个仓库似乎更活跃:https://gitlab.com/m2crypto/m2crypto.git我想我也会尝试安装这个版本。 - joebarbere
我已经成功地使用了上面hjjiang提供的答案,与OpenSSL 1.0.2e兼容。 - domoarigato
2
python setup.py build build_ext --openssl=/usr/local/opt/openssl对我来说有效注意:以上翻译仅为文本内容翻译,不包含任何解释。 - J.Y Han

4

在尝试执行时,在Ubuntu 18.04 LTS上遇到了与同样的问题

pip install M2Crypto==0.24.0

我做了以下操作来消除它:
sudo apt-get install swig
sudo apt-get install libssl1.0-dev

1
这是英文句子,意为:“这个(Python 2.7)解决了我的问题:”。其中的HTML标签

表示段落。

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages

0

macos v10.15.6
m2crypto v0.35.6
pip v20

通过therealmarv的解决方案,问题得到了解决。 如果程序无效,您可以尝试升级brew软件包。在解决方案之前。

brew update              # update homebrew self
brew upgrade             # upgrade all 

-11

sudo apt-get install python-m2crypto

sudo apt-get 安装 python-m2crypto


1
该问题被标记为 osx-elcapitan,其中很可能没有可用的 apt-get - anderas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接