解决 macOS 下 Sublime Text Package Control 安装失败(OpenSSL 版本问题)的完整方案
一、问题概述
核心报错
Sublime Text 安装 / 启动 Package Control 时,反复出现以下错误,导致插件无法安装:
AttributeError: dlsym(0x20a53da00, EVP_PKEY_size): symbol not found
Package Control.package_control.deps.oscrypto._ffi.FFIEngineError: Error initializing ctypes
根本原因
Package Control 依赖 OpenSSL 1.1.x 版本,但 macOS 系统默认或用户已安装 OpenSSL 3.x(符号 EVP_PKEY_size
在 3.x 中已移除),导致 oscrypto
模块初始化失败。
二、环境信息
-
操作系统: macOS 12 Monterey(x86_64 架构,Darwin Kernel Version 21.6.0)
-
Sublime Text 版本: 4200(stable 通道,内置 Python 3.3)
-
OpenSSL 问题版本: 3.x(
/usr/local/lib
下仅存在libcrypto.3.dylib
) -
目标解决版本: OpenSSL 1.1.1w(最后一个稳定版,兼容 Package Control)
三、完整解决步骤
阶段 1:前期准备
打开终端:通过 Spotlight(Cmd+空格
)搜索 “终端”,或在 “应用程序→实用工具” 中找到终端。
获取管理员权限:后续部分命令需 sudo
(管理员权限),执行时输入 macOS 登录密码即可(输入时无明文显示,输完回车即可)。
阶段 2:手动编译安装 OpenSSL 1.1.1w
1. 下载源码并验证完整性
# 进入临时目录(避免占用其他路径)
cd /tmp
# 下载 OpenSSL 1.1.1w 源码(官方最后一个稳定版)
curl -O https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
# 解压源码
tar -zxf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
2. 配置编译参数(适配 x86_64 系统)
# 配置安装路径为 /usr/local/openssl-1.1(避免与系统 3.x 冲突)
# 启用 shared(动态库)和 zlib(压缩支持,Package Control 依赖)
./config --prefix=/usr/local/openssl-1.1 --openssldir=/usr/local/openssl-1.1 shared zlib
正常输出应包含 Configuring OpenSSL version 1.1.1w for darwin64-x86_64-cc
(确认适配 x86_64 架构)。
3. 编译并安装
# 多线程编译(-j4 表示 4 线程,8 核 CPU 可改为 -j8,加速编译)
make -j4
# 安装到指定路径(需管理员权限)
sudo make install
阶段 3:强制 Sublime 加载 OpenSSL 1.1(核心解决步骤)
1. 创建软链接到系统优先搜索路径
DYLD_LIBRARY_PATH
环境变量可能因 GUI 程序权限失效,直接通过软链接让 Sublime 必然找到 1.1.x 库:
# 1. 删除 /usr/local/lib 下旧的 OpenSSL 链接(避免冲突)
sudo rm -f /usr/local/lib/libcrypto.dylib
sudo rm -f /usr/local/lib/libssl.dylib
sudo rm -f /usr/local/lib/libcrypto.1.1.dylib
sudo rm -f /usr/local/lib/libssl.1.1.dylib
# 2. 为 OpenSSL 1.1 创建强制软链接(路径需与安装路径一致)
sudo ln -s /usr/local/openssl-1.1/lib/libcrypto.1.1.dylib /usr/local/lib/libcrypto.dylib
sudo ln -s /usr/local/openssl-1.1/lib/libssl.1.1.dylib /usr/local/lib/libssl.dylib
sudo ln -s /usr/local/openssl-1.1/lib/libcrypto.1.1.dylib /usr/local/lib/libcrypto.1.1.dylib
sudo ln -s /usr/local/openssl-1.1/lib/libssl.1.1.dylib /usr/local/lib/libssl.1.1.dylib
# 3. 验证软链接正确性(输出需指向 /usr/local/openssl-1.1/lib/...)
ls -l /usr/local/lib/libcrypto.dylib
ls -l /usr/local/lib/libcrypto.1.1.dylib
阶段 4:清理 Sublime 残留并重装 Package Control
1. 彻底关闭 Sublime 并删除残留
# 终止 Sublime 进程(确保无后台占用)
pkill -f "sublime_text"
# 删除旧 Package Control 文件
rm -f ~/Library/Application Support/Sublime Text/Installed Packages/Package Control.sublime-package
rm -rf ~/Library/Application Support/Sublime Text/Packages/Package Control
# 删除 Sublime Python 缓存(避免旧配置干扰)
rm -rf ~/Library/Application Support/Sublime Text/Local/*.pyc
rm -rf ~/Library/Application Support/Sublime Text/Local/cache/*
2. 重新安装 Package Control
通过终端启动 Sublime(确保环境加载正常):
open -a "Sublime Text"
打开 Sublime 控制台:按 Cmd+
(数字 1 左边的反引号键)。
粘贴官方安装代码并回车:
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler())); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen('https://packagecontrol.io/' + pf.replace(' ', '%20')).read())
重启 Sublime:
pkill -f "sublime_text" && open -a "Sublime Text"
四、验证解决结果
1. 验证 OpenSSL 1.1 安装成功
# 检查版本(输出 1.1.1w 则正常)
/usr/local/openssl-1.1/bin/openssl version
# 检查库文件权限(输出 rwxr-xr-x 则可读可执行)
ls -l /usr/local/openssl-1.1/lib/libcrypto.1.1.dylib
2. 验证 Sublime 加载了正确的 OpenSSL 库
# 启动 Sublime 后执行,必须有输出(包含 1.1.dylib)
pgrep -x "sublime_text" | xargs -I {} lsof -p {} | grep -i "libcrypto"
成功输出示例:sublime_ 12345 xxxx ... /usr/local/lib/libcrypto.1.1.dylib
3. 验证 Package Control 功能正常
在 Sublime 中按 Cmd+Shift+P
打开命令面板;
输入 Package Control: Install Package
,若能弹出插件搜索框,说明问题彻底解决。
五、注意事项
软链接不影响其他程序:仅 Sublime 会优先使用 /usr/local/lib
的 1.1.x 库,系统其他依赖 3.x 的程序不受影响。
后续升级 OpenSSL 需谨慎:若未来升级 OpenSSL 3.x,需重新执行 “阶段 3” 的软链接步骤(避免 3.x 覆盖 1.1.x 链接)。
备用方案:旧版 Package Control:若仍报错,可安装兼容 Python 3.3 的旧版(3.4.1):
cd ~/Library/Application Support/Sublime Text/Installed Packages/
sudo curl -O https://github.com/wbond/package_control/releases/download/3.4.1/Package.Control.sublime-package
评论区