同事的Mac 10.12.6的macOS Sierra系统:
某项目中,安装了pipenv后,去运行pyspider,结果出现之前遇到过的问题:
ImportError pycurl libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
参考之前自己的:
试了上述的有所的办法,包括:
<code>pipenv shell pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include;pip install pycurl --compile --no-cache-dir </code>
问题依旧。
然后又去参考了:
的
<code>pipenv shell pipenv uninstall pycurl export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl" </code>
以及:
<code>brew reinstall openssl pip uninstall pycurl pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl </code>
相关log
<code>(xxx_process) bash-3.2$ brew reinstall openssl ==> Reinstalling openssl ==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2p.sierra.bottle.tar.gz Already downloaded: /Users/mac/Library/Caches/Homebrew/downloads/a8e90b7dde6f36b6095c1bda76ddcaafb3993c2899bb2742d4d3c59805690c29--openssl-1.0.2p.sierra.bottle.tar.gz ==> Pouring openssl-1.0.2p.sierra.bottle.tar.gz ==> Caveats A CA file has been bootstrapped using certificates from the SystemRoots keychain. To add additional certificates (e.g. the certificates added in the System keychain), place .pem files in /usr/local/etc/openssl/certs and run /usr/local/opt/openssl/bin/c_rehash openssl is keg-only, which means it was not symlinked into /usr/local, because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries. If you need to have openssl first in your PATH run: echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile For compilers to find openssl you may need to set: export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" For pkg-config to find openssl you may need to set: export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig" ==> Summary 🍺 /usr/local/Cellar/openssl/1.0.2p: 1,793 files, 12.3MB </code>
以及:
重新安装了Python官网下载的Python 3.6.7,问题依旧。
后来又遇到:
src/pycurl.h:164:13: fatal error: ‘openssl/ssl.h’ file not found
参考自己的:
【已解决】Mac中编译安装pycurl失败:error: command ‘gcc’ failed with exit status 1
发现:
自己之前是:
<code>xx-Pro:~ x$ which openssl /usr/bin/openssl xx-Pro:~ x$ openssl version -a LibreSSL 2.2.7 built on: date not available platform: information not available options: bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) blowfish(idx) compiler: information not available OPENSSLDIR: "/private/etc/ssl" </code>
此处是:
<code>(xx) bash-3.2$ which openssl /usr/local/opt/openssl/bin/openssl (xx) bash-3.2$ openssl version -a OpenSSL 1.0.2p 14 Aug 2018 built on: reproducible build, date unspecified platform: darwin64-x86_64-cc options: bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) idea(int) blowfish(idx) compiler: clang -I. -I.. -I../include -fPIC -fno-common -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/usr/local/etc/openssl" </code>
-》
自己10.13.6的Mac中:
openssl路径是:/usr/bin/openssl
openssl version中用的库是:LibreSSL 2.2.7
同事的10.12.6的Mac中:
openssl路径是:/usr/local/opt/openssl/bin/openssl
openssl version中用的库是:OpenSSL 1.0.2p 14 Aug 2018
-》完全不同。
去找了下区别:
tls – What are the main advantages of using LibreSSL in favor of OpenSSL – Information Security Stack Exchange
解释是:
LibreSSL是基于TLS/crypto栈的,2014年从OpenSSL分出来的版本
LibreSSL有更多优势:
代码架构更加优化
提升了安全性
OpenSSL出现过的6个安全漏洞,在LibreSSL中都没有出现
更多最佳实践过程
并且大家采用LibreSSL也更多:
OpenBSD中,替代了OpenSSL
OS X 10.11之后就换用LibreSSL了
-》结论很明显:
能用LibreSSL就用LibreSSL,尽量不要在用OpenSSL了。
-》所以此处为了解决
ImportError: pycurl: libcurl link-time ssl backend (none/other) is different from compile-time ssl backend (openssl)
的问题,最好是去升级macOS到最新版本后,再去安装openssl,然后或许问题就可以解决了。
-》结果真的问题就解决了。
-》说明真的是:
【总结】
旧Mac系统 10.12.6中,用brew install openssl时:
https://homebrew.bintray.com/bottles/openssl-1.0.2p.sierra.bottle.tar.gz
-》去下载的是sierra=10.12.6的Mac的openssl
-》其内部用的库是:OpenSSL
而新系统,至少:
我的 10.13.6 macOS High Sierra
和同事升级后的:10.14 macOS Mojave
(参考:
【已解决】Mac中编译安装pycurl失败:error: command ‘gcc’ failed with exit status 1
)
brew install openssl
安装:
https://homebrew.bintray.com/bottles/openssl-1.0.2p.high_sierra.bottle.tar.gz
的是:high sierra
-》 是10.13.6之后的openssl
-》内部的库是:LibreSSL
-》此时才可以正常使用。
-》后续运行pyspider才正常。
所以此处的解决办法就是:
升级Mac系统到10.13.6 macOS High Sierra(或更新的10.14 macOS Mojave)
转载请注明:在路上 » 【已解决】Mac中pipenv中运行PySpider出错:ImportError pycurl libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)