Mac OSX Python安装M2Crypto

4,031 阅读2分钟

M2Crypto有两个依赖,opensslswig,在Mac上需要首先安装这两个包,才能安装M2Crypto

安装依赖:

brew install openssl
brew install swig
# 有时候需要手动链接swig
# brew unlink swig && brew link swig

然后安装可能会出现错误


Building wheels for collected packages: m2crypto
  Building wheel for m2crypto (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/vic/.pyenv/versions/3.7.5/envs/storage/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/tmp/pip-install-48d42grt/m2crypto/setup.py'"'"'; __file__='"'"'/private/tmp/pip-install-48d42grt/m2crypto/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/tmp/pip-wheel-6mytatj4
       cwd: /private/tmp/pip-install-48d42grt/m2crypto/
  Complete output (53 lines):
  running bdist_wheel
  running build
  running build_py
  copying M2Crypto/callback.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/EVP.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/AuthCookie.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/m2.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/ftpslib.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/EC.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/httpslib.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/X509.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/util.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/RSA.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/BIO.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/DH.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/__init__.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/threading.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/Rand.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/SMIME.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/Engine.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/m2xmlrpclib.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/RC4.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/m2urllib2.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/DSA.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/six.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/m2urllib.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/BN.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/m2crypto.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/Err.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  copying M2Crypto/ASN1.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto
  creating build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/cb.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/Session.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/timeout.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/__init__.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/TwistedProtocolWrapper.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/Cipher.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/Connection.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/Context.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/SSLServer.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/ssl_dispatcher.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  copying M2Crypto/SSL/Checker.py -> build/lib.macosx-10.15-x86_64-3.7/M2Crypto/SSL
  running build_ext
  building 'M2Crypto._m2crypto' extension
  swigging SWIG/_m2crypto.i to SWIG/_m2crypto_wrap.c
  swig -python -py3 -I/Users/vic/.pyenv/versions/3.7.5/envs/storage/include -I/Users/vic/.pyenv/versions/3.7.5/include/python3.7m -I/usr/include/openssl -I/usr/local/include -I/Library/Developer/CommandLineTools/usr/lib/clang/11.0.3/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory) -I/usr/local/include -I/Library/Developer/CommandLineTools/usr/lib/clang/11.0.3/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory) -includeall -modern -builtin -outdir /private/tmp/pip-install-48d42grt/m2crypto/M2Crypto -o SWIG/_m2crypto_wrap.c SWIG/_m2crypto.i
  Deprecated command line option: -modern. This option is now always on.
  SWIG/_m2crypto.i:62: Error: Unable to find 'openssl/opensslv.h'
  SWIG/_m2crypto.i:68: Error: Unable to find 'openssl/safestack.h'
  SWIG/_evp.i:12: Error: Unable to find 'openssl/opensslconf.h'
  SWIG/_rc4.i:5: 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
  ----------------------------------------
  ERROR: Failed building wheel for m2crypto

可以在报错中看到,在build阶段就出现了这个错误,错误的截取不全,还有后续的setup,抛出和build失败相同的错误,这时候需要指定ooenssl和swig的路径

在stackoverflow中找到相同的问题,可以参考:stackoverflow.com/questions/3…

使用

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

以上命令可以直接复制粘贴使用,如果你需要指定版本号,则在命令最后指定。