侧边栏壁纸
博主头像
惬意小蜗牛博主等级

海内存知己,天涯若比邻!

  • 累计撰写 55 篇文章
  • 累计创建 145 个标签
  • 累计收到 69 条评论

目 录CONTENT

文章目录

解决 macOS 下 Sublime Text Package Control 安装失败(OpenSSL 版本问题)的完整方案

惬意小蜗牛
2025-09-26 / 0 评论 / 0 点赞 / 2 阅读 / 1,435 字 / 正在检测是否收录...

解决 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
0

评论区