MacOS Catalina 10.15.7下pyenv安装Python出现SSL证书验证错误
配置问题排查
核心问题1:shell环境变量被覆盖
你当前.bashrc中LDFLAGS、CPPFLAGS参数采用重复赋值的写法,后定义的变量会直接覆盖之前的配置,最终生效的只有最后一行bison的库路径,openssl、readline等依赖的编译参数全部失效,导致Python编译时无法关联正确的SSL库。
核心问题2:pyenv初始化顺序错误
现有配置中先执行pyenv virtualenv-init,后定义PYENV_ROOT,且缺少pyenv init调用,不符合pyenv的初始化要求,会导致pyenv的环境参数加载异常。
核心问题3:根证书路径未配置
pyenv编译的Python默认不会自动读取brew安装的ca-certificates根证书集合,也不会直接调用Mac系统钥匙串中的证书,导致SSL验证时找不到信任的根证书。
修复步骤
- 修正
.bashrc配置,替换原有PATH、Exports、pyenv部分的内容:
# PATH 去重合并 export PATH="$(brew --prefix sqlite)/bin:\ $(brew --prefix openssl@1.1)/bin:\ $(brew --prefix bison)/bin:\ $HOME/Library/Android/sdk/platform-tools:\ $HOME/.pyenv/bin:\ $PATH" # 合并所有编译参数,避免覆盖 export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/sqlite/lib -L/usr/local/opt/zlib/lib -L/usr/local/opt/bison/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/readline/include -I/usr/local/opt/sqlite/include -I/usr/local/opt/zlib/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig:/usr/local/opt/sqlite/lib/pkgconfig" # 配置全局根证书路径 export SSL_CERT_FILE="$(brew --prefix ca-certificates)/share/ca-certificates/cacert.pem" # pyenv配置 顺序不可调整 export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/shims:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)"
如果日常使用zsh,需要同步修改~/.zshrc的对应配置。
- 重载shell配置:执行
source ~/.bashrc(zsh执行source ~/.zshrc) - 卸载所有pyenv已安装的Python版本:
pyenv uninstall -f 3.8.12 3.9.8 3.10.0
- 带openssl参数重新编译安装所有Python版本:
PYTHON_CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" pyenv install 3.8.12 PYTHON_CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" pyenv install 3.9.8 PYTHON_CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" pyenv install 3.10.0
- 执行
pyenv rehash刷新pyenv缓存。
验证方法
切换到对应Python版本后执行以下命令,返回200即说明SSL功能正常:
python -c "import urllib.request; print(urllib.request.urlopen('https://www.baidu.com').getcode())"
内容的提问来源于stack exchange,提问作者element6
相关产品推荐
相关产品推荐

