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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:45:40