You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scrapy爬取页面时遇OpenSSL._util导入错误,寻求解决方法

解决Python2.7 + pyOpenSSL 13.1的ImportError: No module named _util问题

我之前在Mac High Sierra上用Python2.7跑Scrapy的时候也碰到过一模一样的问题,折腾了好一阵才搞定,给你几个可行的方案试试:

  • 方案一:重新指定OpenSSL路径安装pyOpenSSL
    Mac自带的OpenSSL(实际是LibreSSL)版本可能和pyOpenSSL 13.1不兼容,虽然你已经执行了brew link openssl,但Python2.7在编译pyOpenSSL的C扩展模块时可能没正确识别到brew安装的openssl。你可以通过CFLAGS和LDFLAGS强制指定路径,重新安装pyOpenSSL:
# 获取brew openssl的安装前缀
OPENSSL_PREFIX=$(brew --prefix openssl)
# 强制重新安装pyOpenSSL 13.1
CFLAGS="-I${OPENSSL_PREFIX}/include" LDFLAGS="-L${OPENSSL_PREFIX}/lib" pip install pyOpenSSL==13.1 --force-reinstall
  • 方案二:用虚拟环境隔离系统依赖
    系统Python的全局环境很容易因为各种包的版本冲突出问题,建议给Scrapy单独创建一个干净的虚拟环境:
# 先安装virtualenv
pip install virtualenv
# 创建基于Python2.7的虚拟环境
virtualenv -p python2.7 scrapy_env
# 激活虚拟环境
source scrapy_env/bin/activate
# 在干净环境里安装依赖
pip install pyOpenSSL==13.1 scrapy

激活环境后再启动爬虫,大概率能避开系统环境的干扰。

  • 方案三:检查编译依赖是否完整
    pyOpenSSL的_util是编译生成的C扩展模块,如果安装时编译失败就会缺失。你可以先确保Xcode命令行工具已安装:
xcode-select --install

完成安装后再重新执行方案一的安装命令,观察编译过程有没有报错。

  • 方案四:确保brew link openssl完全生效
    有时候brew link openssl会因为系统限制未成功,试试加上--force参数强制链接:
brew link openssl --force

执行时会出现警告提示,但在High Sierra下这个操作是安全的,能确保系统优先使用brew安装的openssl版本。

如果还是不行,你可以在重新安装时加上-v参数查看详细日志(比如pip install ... -v),看看编译阶段有没有具体的错误信息,这样更容易定位问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:21