Conda安装Spacy后,Jupyter Notebook导入时出现UnsupportedOperation错误
解决Jupyter Notebook中import spacy报错UnsupportedOperation: fileno的问题
问题原因
这个错误来自wasabi库(spacy的依赖库)初始化Printer时,尝试获取sys.stdout的文件句柄(fileno()),但Jupyter Notebook的标准输出不是传统终端的文件流,导致该调用失败。
解决方案
临时快速修复(优先推荐)
在import spacy前,先设置环境变量禁用wasabi的终端美化检测:import os os.environ["WASABI_NO_PRETTY"] = "1" # 禁用颜色和美化输出 import spacy或者设置
LOG_FRIENDLY环境变量:import os os.environ["LOG_FRIENDLY"] = "1" import spacy升级wasabi库
旧版本的wasabi存在Jupyter环境兼容问题,升级到最新版本即可解决:
用conda升级:conda install -c conda-forge wasabi --upgrade或用pip升级:
pip install --upgrade wasabi修改wasabi源码(应急方案,不推荐)
找到报错的wasabi/util.py文件(路径类似~\anaconda3\lib\site-packages\wasabi\util.py),修改_windows_console_supports_ansi函数,添加异常捕获:def _windows_console_supports_ansi(): try: import ctypes from ctypes import wintypes except ImportError: return False kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) handle = kernel32.GetStdHandle(-11) # STD_OUTPUT_HANDLE if handle == wintypes.HANDLE(-1).value: return False mode = wintypes.DWORD() if not kernel32.GetConsoleMode(handle, ctypes.byref(mode)): return False try: console = msvcrt.get_osfhandle(sys.stdout.fileno()) except UnsupportedOperation: return False # 原函数后续代码保持不变注意:此修改会在库更新后被覆盖,仅作为临时应急手段。
内容的提问来源于stack exchange,提问作者Rak
相关产品推荐
相关产品推荐

