在 OS X / macOS 上使用 pip 安装 m2crypto 时遇到问题
Trouble installing m2crypto with pip on OS X / macOS
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
为了让这个在 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
据我所知,它已安装...不过我仍然需要做一些测试。
我想要一种更好的方式,无需手动安装并仅使用 Homebrew(默认情况下也不 link openssl)。使用 pip
也是一项要求。这似乎适用于最新的 m2crypto 0.22.5。我还使用 m2crypto 0.22.3 对其进行了一次测试,并且似乎也可以正常工作。这里的OpenSSL版本是1.0.2d:
brew install openssl
brew install swig
最后在 Bash 的 macOS 上安装 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
多亏了 therealmarv env 标志,我才能够让它与 openssl/swig 的 macports 版本一起工作,这就是我所做的:
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
sudo apt-get install python-m2crypto
这解决了我的问题 (Python 2.7):
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
在 Ubuntu 18.04 LTS 上获得准确的 ,同时尝试执行
pip install M2Crypto==0.24.0
执行以下操作来摆脱它:
sudo apt-get install swig
sudo apt-get install libssl1.0-dev
macos v10.15.6
m2crypto v0.35.6
点 v20
realmarv 的解决方案有效,
如果程序没有生效,您可以尝试升级您的 brew 包。解决前
brew update # update homebrew self
brew upgrade # upgrade all
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
为了让这个在 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
据我所知,它已安装...不过我仍然需要做一些测试。
我想要一种更好的方式,无需手动安装并仅使用 Homebrew(默认情况下也不 link openssl)。使用 pip
也是一项要求。这似乎适用于最新的 m2crypto 0.22.5。我还使用 m2crypto 0.22.3 对其进行了一次测试,并且似乎也可以正常工作。这里的OpenSSL版本是1.0.2d:
brew install openssl
brew install swig
最后在 Bash 的 macOS 上安装 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
多亏了 therealmarv env 标志,我才能够让它与 openssl/swig 的 macports 版本一起工作,这就是我所做的:
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
sudo apt-get install python-m2crypto
这解决了我的问题 (Python 2.7):
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
在 Ubuntu 18.04 LTS 上获得准确的
pip install M2Crypto==0.24.0
执行以下操作来摆脱它:
sudo apt-get install swig
sudo apt-get install libssl1.0-dev
macos v10.15.6
m2crypto v0.35.6
点 v20
realmarv 的解决方案有效, 如果程序没有生效,您可以尝试升级您的 brew 包。解决前
brew update # update homebrew self
brew upgrade # upgrade all