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

Jupyter Notebook中Spacy报UnsupportedOperation: fileno错误求助

问题:Windows 11 Conda环境下Jupyter Notebook导入Spacy报错UnsupportedOperation: fileno

在Windows 11系统的Conda环境(Python 3.9)中,使用Jupyter Notebook导入Spacy时出现UnsupportedOperation: fileno错误,但Python命令行中Spacy可正常运行。已尝试搜索相关错误信息但未找到针对性解决方案,附上错误栈信息,求解答错误原因及解决办法。

错误栈信息

UnsupportedOperation                      Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_4264/572880994.py in <module>
----> 1 import spacy

C:\ProgramData\Anaconda3\lib\site-packages\spacy\__init__.py in <module>
      4 
      5 # set library-specific custom warning handling before doing anything else
----> 6 from .errors import setup_default_warnings
      7 
      8 setup_default_warnings()  # noqa: E402

C:\ProgramData\Anaconda3\lib\site-packages\spacy\errors.py in <module>
      1 import warnings
----> 2 from .compat import Literal
      3 
      4 
      5 class ErrorsWithCodes(type):

C:\ProgramData\Anaconda3\lib\site-packages\spacy\compat.py in <module>
      1 """Helpers for Python and platform compatibility."""
      2 import sys
----> 3 from thinc.util import copy_array
      4 
      5 try:

C:\ProgramData\Anaconda3\lib\site-packages\thinc\__init__.py in <module>
      3 
      4 from .about import __version__
----> 5 from .config import registry

C:\ProgramData\Anaconda3\lib\site-packages\thinc\config.py in <module>
     11 from pydantic.main import ModelMetaclass
     12 from pydantic.fields import ModelField
----> 13 from wasabi import table
     14 import srsly
     15 import catalogue

C:\ProgramData\Anaconda3\lib\site-packages\wasabi\__init__.py in <module>
     10 from .about import __version__  # noqa
     11 
----> 12 msg = Printer()

C:\ProgramData\Anaconda3\lib\site-packages\wasabi\printer.py in __init__(self, pretty, no_print, colors, icons, line_max, animation, animation_ascii, hide_animation, ignore_warnings, env_prefix, timestamp)
     54         self.pretty = pretty and not env_no_pretty
     55         self.no_print = no_print
----> 56         self.show_color = supports_ansi() and not env_log_friendly
     57         self.hide_animation = hide_animation or env_log_friendly
     58         self.ignore_warnings = ignore_warnings

C:\ProgramData\Anaconda3\lib\site-packages\wasabi\util.py in supports_ansi()
    262         if "ANSICON" in os.environ:
    263             return True
---> 264         return _windows_console_supports_ansi()
    265 
    266     return True

C:\ProgramData\Anaconda3\lib\site-packages\wasabi\util.py in _windows_console_supports_ansi()
    234             raise ctypes.WinError()
    235 
---> 236     console = msvcrt.get_osfhandle(sys.stdout.fileno())
    237     try:
    238         # Try to enable ANSI output support

C:\ProgramData\Anaconda3\lib\site-packages\ipykernel\iostream.py in fileno(self)
    306             return self._original_stdstream_copy
    307         else:
---> 308             raise io.UnsupportedOperation("fileno")
    309 
    310     def _watch_pipe_fd(self):

UnsupportedOperation: fileno

错误原因

问题出在Spacy依赖的wasabi库:初始化时它会检测Windows控制台是否支持ANSI颜色输出,检测过程中调用了sys.stdout.fileno()方法。但Jupyter Notebook的标准输出是基于管道的虚拟流,并非传统控制台的文件描述符,不支持fileno()方法,因此抛出错误。而Python命令行使用原生控制台流,支持该方法,所以能正常运行。

解决办法

方法1:禁用wasabi彩色输出(推荐)

在导入Spacy前设置环境变量WASABI_NO_PRETTY=1,强制跳过ANSI检测:

import os
os.environ["WASABI_NO_PRETTY"] = "1"
import spacy

方法2:升级wasabi到最新版本

旧版本wasabi存在Jupyter环境兼容性问题,新版本已修复该检测逻辑。在Conda环境执行:

conda install -c conda-forge wasabi --update-deps

或用pip升级:

pip install --upgrade wasabi

方法3:临时重定向标准输出(应急方案)

导入Spacy前临时将stdout替换为支持fileno()的对象,导入完成后恢复:

import sys
import tempfile

# 保存原始stdout
original_stdout = sys.stdout
# 创建临时文件作为临时输出
with tempfile.TemporaryFile(mode='w+') as temp_file:
    sys.stdout = temp_file
    import spacy
    # 恢复原始stdout
    sys.stdout = original_stdout

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:15:27