SUSE SLES 12SP3安装Python3时readline导入错误解决求助
解决SUSE SLES 12SP3中Python 3.6导入readline的错误
你这是踩了个典型的跨平台适配坑——Linux系统上误装了Windows专用的pyreadline包,才导致那些和ctypes.wintypes相关的奇怪错误。下面一步步帮你彻底解决,也给你临时跳过的方案:
一、彻底解决:移除错误包+补依赖重编译Python
1. 先删掉没用的pyreadline
这个包是给Windows系统用的,在Linux上完全起反作用,先卸载:
# 注意指定你安装的Python3.6对应的pip sudo /usr/local/bin/pip3.6 uninstall -y pyreadline
2. 安装系统级readline开发依赖
你之前编译Python时,大概率没装SUSE的readline开发库,导致Python没能编译出Linux原生的readline模块,这才会触发后续的错误。补装依赖:
sudo zypper install readline-devel
3. 重新编译安装Python
回到你的Python源码目录,清理旧编译文件后重新编译:
cd /tmp/Python-3.6.4 make clean ./configure --prefix=/usr/local make altinstall
4. 验证修复
现在运行/usr/local/bin/python3.6,应该不会再弹出Failed calling sys.__interactivehook__的错误了,而且交互模式下按上下箭头能调出历史命令,说明原生readline正常工作。
二、临时跳过错误的方法(不推荐长期用)
如果暂时不想重新编译,可以临时禁用触发错误的交互钩子:
- 启动Python时加参数:
python3.6 -s - 或者进入Python交互模式后执行:
import sys sys.__interactivehook__ = lambda: None
但这个方法会丢失readline的历史记录、自动补全功能,只能作为临时应急方案。
内容的提问来源于stack exchange,提问作者vinsent paramanantham
相关产品推荐
相关产品推荐

