非Jupyter环境Python3.8运行tqdm报IProgress导入错误如何修复
问题说明
Python 3.8环境执行tqdm(train_ImageDataloader_ResNet)时触发进度条组件导入异常,报错信息如下:
File "C:\Python\Python38\lib\site-packages\tqdm\notebook.py", line 242, in __init__ self.container = self.status_printer(self.fp, total, self.desc, self.ncols) File "C:\Python\Python38\lib\site-packages\tqdm\notebook.py", line 118, in status_printer raise ImportError(WARN_NOIPYW) ImportError: IProgress not found. Please update jupyter and ipywidgets.
本地已安装ipywidgets、iprogress依赖,且代码运行环境并非Jupyter Notebook。
故障原因
tqdm自带的运行环境自动检测逻辑出现误判,错误加载了仅适配Jupyter/IPython Notebook场景的tqdm.notebook版本。该版本强依赖ipywidgets提供的IProgress前端组件实现渲染,在普通Python脚本、命令行终端、非notebook类交互shell环境下无法正常初始化,因此抛出导入错误,和相关依赖是否安装没有直接关联。
解决方案
按优先级选择以下任意一种方案即可修复:
- 强制使用终端适配版tqdm:替换原有导入语句,将
from tqdm import tqdm修改为from tqdm.std import tqdm,直接跳过tqdm的自动环境检测逻辑,调用适配普通命令行环境的标准tqdm实现。 - 配置环境变量禁用notebook适配:在代码最开头、导入tqdm之前添加如下配置,告知tqdm不要加载notebook相关组件:
import os os.environ["TQDM_NOTEBOOK"] = "0" from tqdm import tqdm - 清除环境残留标记:如果是在IPython交互终端运行代码,可先执行
%matplotlib inline后重试,或直接重启Python解释器——部分场景下之前运行过notebook内核的残留标记会导致tqdm误判当前环境。 - 重装tqdm清缓存:如果以上方法均无效,执行以下命令重装tqdm,清除异常配置缓存:
pip uninstall -y tqdm pip install tqdm --no-cache-dir
不需要为了这个报错反复重装
ipywidgets,该依赖仅在Jupyter环境下会被tqdm调用,普通脚本、终端环境不需要该依赖即可正常运行tqdm进度条。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

