因为不当心在mac作了一下brew版本升级,而后用pip3安装一个第三方lib就报错了(涉及到openssl库):python
ImportError: dlopen(/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylibgit
根据提示,应该是缺乏了openssl1.0.0的两个库:github
libcrypto.1.0.0.dylibvim
libssl.1.0.0.dylibbash
个人macOS版本:10.15.6 (19G2021) 网络
那如何在mac上安装openssl1.0.0呢,网上大多数文章都是推荐使用brew直接安装openssl,但实际上没法安装成功,在这里我给你们分别介绍网上的安装方法和我本地编译安装的方法。ide
1. brew安装
用brew安装openssl1.0.0(我试了下,按照这种方式,网络不通,没法安装)测试
#卸载老版本opensslbrew uninstall --ignore-dependencies openssl#brew一键安装brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb
能fq的盆友能够试试以上操做,不能***的仍是老老实实编译一个openssl的版本。spa
下面给你们介绍一个openssl1.0源码编译的安装方式。操作系统
2. perl5.15安装
安装openssl1.0以前,必须安装perl5.16,不然在执行make install时候会报错,pod2man的错误:
cms.pod around line 457: Expected text after =item, not a number
cms.pod around line 461: Expected text after =item, not a number
cms.pod around line 465: Expected text after =item, not a number
cms.pod around line 470: Expected text after =item, not a number
cms.pod around line 474: Expected text after =item, not a number
POD document had syntax errors at /usr/bin/pod2man line 69.
网上给的作法是直接rm -f /usr/bin/pod2man,实际上这么是没法操做的,也是不推荐的(破坏了系统),咱们采起更加温和的方式来解决问题。
在命令行执行以下命令:
wget https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.16.3.tar.bztar xzvf perl-5.16.3.tar.bzcd perl-5.16.3./configure.gnumakesudo make install
执行:perl -v, 显示对于版本为5.16.4,安装OK了。
3. openssl1.0.0安装
wget https://www.openssl.org/source/old/1.0.0/openssl-1.0.0.tar.gz
tar xzvf openssl-1.0.0.tar.gz
cd openssl-1.0.0
1)查看操做系统信息
uname -a
2)咱们选择darwin64-x86_64-cc(64位的mac系统)
./Configure LIST | grep darwin
配置生成静态库这里很是关键点:由于咱们缺乏的是动态库,因此要加上no-asm,默认会生成shared库(动态),若是加上no-shared,就只会生成静态库。
./Configure darwin64-x86_64-cc --prefix=/usr/local/opt/openssl no-asm --openssldir=/usr/local/ssl
openssl1.0.x版本中配置动态库的参数各有不一样,有的须要加上-shared生成动态库,有的不须要。具体须要参考./Configure -h查看下。
下图中所示openssl1.0.0就不加参数,默认生成动态库,若是加上了no-shared就不会生成动态库
1) 输入:./config
这里面看到一个提示,意思是说若是是Mac64位系统,须要从新手动执行(后面有说明):
./Configure darwin64-x86_64-cc
这里网上说的是设置环境变量(export KERNEL_BITS=64),可是其实是没用的。
2) 查看Makefile,里面的配置是i386的动态连接库(32位)
3)从新配置Makefile
./Configure darwin64-x86_64-cc --prefix=/usr/local/opt/openssl no-asm --openssldir=/usr/local/ssl
这时候Makefile就会变成x86_64的配置了
sudo make
1) 全局安装openssl,输入:
sudo make install
2) 生成动态连接库
这里很奇怪,不知道为啥没有生成动态连接库。因此只能手动在命令行下执行:
/Library/Developer/CommandLineTools/usr/bin/make libcrypto.1.0.0.dylib/Library/Developer/CommandLineTools/usr/bin/make libssl.1.0.0.dylib
3)拷贝openssl1.0.0的动态连接库到对应目录
cp libcrypto.1.0.0.dylib libcrypto.dylib libssl.1.0.0.dylib libssl.dylib /usr/local/ssl/libcp libcrypto.1.0.0.dylib libcrypto.dylib libssl.1.0.0.dylib libssl.dylib /usr/local/opt/openssl/lib
4)从新生成软链接
分别在以上两个目录(/usr/local/ssl/lib和 /usr/local/opt/openssl/lib)进行以下操做:
#1.这里删除以前的软连接,可能指向是别的版本的opensslrm -rf libssl.dylib libcrypto.dylib#2.生成软链接sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylibsudo ln -s libssl.1.0.0.dylib libssl.dylib
以下图红框所示,就算ok了
1)检查openssl版本
输入:openssl version
能够看到mac用的是默认是LibreSSL,须要修改下PATH
2)修改默认openssl
#我用的是zsh,若是你用的是bash,请vim ~/.bashrc)
输入:sudo vim ~/zshrc, 配置以下内容
export PATH="/usr/local/ssl/bin:$PATH"
3)从新加载环境变量
. ~/.zshrc
4)再输入openssl version
当前使用的openssl对应的版本为1.0.0,算是大功告成了。
后话:为了编译这个openssl1.0.0版本,前先后后遇到了五六个坑,我花了近一天的时间才搞定,若是本文解决了你的问题,辛苦帮忙顺手点个赞,让更多人省下踩坑的时间,多陪陪家人~
博主:测试生财
座右铭:专一测试与自动化,致力提升研发效能;经过测试精进完成原始积累,经过读书理财奔向财务自由。