You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MacOS下如何关联Python 2.7与最新OpenSSL并同步虚拟环境版本

解决Python 2.7关联新版OpenSSL并同步virtualenv版本的问题

你遇到的核心问题是:Mac系统自带的Python 2.7默认静态绑定了旧版OpenSSL,和你系统中独立安装的新版OpenSSL不共用,导致pip因TLS协议版本过低报错。下面是一步步的解决方法:

一、先明确关键前提

Python 2.7是静态链接OpenSSL库的——这意味着它不会自动调用系统里的新版OpenSSL,必须重新编译Python,让它在编译时就关联到你的新版OpenSSL,才能解决版本不一致的问题。

二、确认新版OpenSSL的路径

首先找到你系统中新版OpenSSL的安装目录:

# 查看OpenSSL的可执行文件路径
which openssl
# 输出示例:/usr/local/bin/openssl

再找到它的头文件和库文件所在的根目录(如果是用Homebrew安装的,直接用下面的命令;手动安装的话,对应你的OPENSSLDIR路径即可):

# 获取Homebrew安装的OpenSSL根目录
brew --prefix openssl
# 输出示例:/usr/local/opt/openssl

三、重新编译Python 2.7并关联新版OpenSSL

  1. 下载Python 2.7的最后一个稳定版本(2.7.18,也是官方支持的最后一个Python 2.7版本),解压后进入源码目录:
cd Python-2.7.18
  1. 配置编译参数,指定链接到新版OpenSSL,同时设置自定义安装路径(避免覆盖系统自带Python):
./configure --prefix=/usr/local/python27 \
    --with-openssl=/usr/local/opt/openssl \
    --enable-shared

注意:把--with-openssl后面的路径替换成你刚才查到的新版OpenSSL根目录。

  1. 编译并安装:
make
sudo make install

四、配置环境变量,让系统优先使用新编译的Python

编辑你的Shell配置文件(比如~/.bash_profile~/.zshrc,根据你用的Shell选择),添加以下内容:

# 让系统优先调用新编译的Python 2.7
export PATH="/usr/local/python27/bin:$PATH"
# 确保动态链接库能找到新版OpenSSL
export DYLD_LIBRARY_PATH="/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH"

然后刷新配置生效:

# Bash用户
source ~/.bash_profile
# Zsh用户
source ~/.zshrc

现在验证版本是否匹配:

# 检查Python关联的OpenSSL版本
python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
# 应该输出和你系统openssl一致的版本:OpenSSL 1.0.2k 26 Jan 2017
# 检查pip路径
pip -V
# 应该显示:pip xx.x.x from /usr/local/python27/site-packages/pip (python 2.7)

五、让virtualenv同步使用新版Python和OpenSSL

  1. 用新的pip安装(或升级)virtualenv:
pip install --upgrade virtualenv
  1. 创建虚拟环境时,默认会使用当前PATH中优先级最高的新Python:
virtualenv my_project_env
  1. 激活虚拟环境后验证版本:
source my_project_env/bin/activate
python -c 'import ssl; print(ssl.OPENSSL_VERSION)'
# 依然会显示新版OpenSSL版本,说明同步成功

六、解决pip的TLS协议错误

重新编译Python后,pip应该已经支持TLS 1.2+,之前的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]错误会消失。如果仍有问题,升级pip到Python 2.7兼容的最后一个版本:

pip install --upgrade pip==20.3.4

内容的提问来源于stack exchange,提问作者Ratha

火山引擎 最新活动