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

PyInstaller打包requests程序遇SSL错误:无法导入_ssl模块

解决PyInstaller打包Python脚本后运行EXE出现SSL DLL加载失败的问题

我最近踩了个实实在在的坑:用Anaconda3环境下的Python 3.7写了个脚本,靠requests模块调用API做GET/POST请求,本地直接跑脚本一点问题都没有,但用PyInstaller 3.6打包成EXE之后,一运行就炸锅了。当时用的相关包版本是requests 2.24.0、OpenSSL 1.1.1h。

报错的完整栈信息是这样的:

Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth_certifi.py", line 13, in <module>
File "c:\programdata\anaconda3\envs\...\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module
File "ssl.py", line 98, in <module>
ImportError: DLL load failed: 找不到指定的模块。
[20188] Failed to execute script pyi_rth_certifi

一开始我以为是PyInstaller打包时漏了SSL相关的依赖,在Stack Overflow翻了好几个高赞方案,试了修改spec文件指定ssl路径、手动添加certifi文件之类的操作,结果全没用,问题还是卡在ssl.py导入_ssl模块失败这儿。

最后终于靠cbolwerk的方法解决了,这里把关键要点给大家说清楚:

  • 一定要安装最新版本的OpenSSL库,哪怕你的Anaconda环境里已经装了新的OpenSSL,本地系统里的旧版本也会拖后腿导致这个错误
  • 亲测这个方案在完全没安装过OpenSSL的目标电脑上也能正常运行,不需要对方额外装OpenSSL

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

火山引擎 最新活动