-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
到分割长句这里有报错且卡住无法继续:
/Users/miniconda3/envs/videolingo/lib/python3.10/importlib/init.py:169: UserWarning: TorchAudio's global backend is now deprecated. Please enable distpatcher by setting TORCHAUDIO_USE_BACKEND_DISPATCHER=1
, and specify backend when calling load/info/save function.
_bootstrap._exec(spec, module)
/Users/miniconda3/envs/videolingo/lib/python3.10/site-packages/streamlit/watcher/local_sources_watcher.py:210: UserWarning: Torchaudio's I/O functions now support par-call bakcend dispatch. Importing backend implementation directly is no longer guaranteed to work. Please use backend
keyword with load/save/info function, instead of calling the udnerlying implementation directly.
lambda m: list(m.path._path),
问了大模型,回复如下:
这些警告信息来自 torchaudio
库,提示你其旧的全局后端(global backend)机制已被弃用,建议迁移到新的**后端调度器(backend dispatcher)**机制。这是 torchaudio
从 2.0+ 版本开始引入的现代化 I/O 架构。
⚠️ 警告解释
-
第一个警告:
TorchAudio's global backend is now deprecated. Please enable dispatcher by setting
TORCHAUDIO_USE_BACKEND_DISPATCHER=1
, and specify backend when calling load/info/save function.- 你当前可能在使用
torchaudio.load()
、info()
或save()
时,依赖了已废弃的全局后端设置。 - 解决方法是启用新的调度器,并在调用 I/O 函数时显式指定
backend
。
- 你当前可能在使用
-
第二个警告:
Torchaudio's I/O functions now support backend dispatch... Importing backend implementation directly is no longer guaranteed to work.
- 你或某个依赖库(如
streamlit
插件)可能直接导入了底层后端实现(例如torchaudio.backend.sox_io_backend
),这在未来将不再被支持。
- 你或某个依赖库(如
✅ 解决方案
✅ 方法一:设置环境变量并更新代码(推荐)
在运行程序前,设置环境变量启用新调度器:
export TORCHAUDIO_USE_BACKEND_DISPATCHER=1
然后,在你的代码中显式指定 backend
参数:
import torchaudio
# ✅ 正确做法:指定 backend
waveform, sample_rate = torchaudio.load('audio.wav', backend='soundfile') # 或 'sox_io'
# 其他函数也类似
info = torchaudio.info('audio.wav', backend='soundfile')
torchaudio.save('output.wav', waveform, sample_rate, backend='soundfile')
常见
backend
值:
'soundfile'
:支持 WAV, FLAC, OGG, etc.(推荐用于通用场景)'sox_io'
:支持更多格式,但依赖 libsox'ffmpeg'
:通过torchaudio
+pydub
或外部工具链支持
✅ 方法二:临时抑制警告(不推荐长期使用)
如果你暂时无法修改代码(比如是第三方库引发的),可以临时屏蔽警告:
import warnings
warnings.filterwarnings("ignore", module="torchaudio")
或更精确地:
warnings.filterwarnings(
"ignore",
message="TorchAudio's global backend is now deprecated",
module="torchaudio"
)
但这只是“眼不见为净”,不解决根本问题。
🔍 如何定位问题代码?
这些警告来自:
streamlit/watcher/local_sources_watcher.py
说明可能是 streamlit
在监控文件时自动加载了音频文件,而它使用的 torchaudio
调用方式过时。
你可以:
- 检查你的
streamlit
应用中是否自动加载音频。 - 升级
torchaudio
和streamlit
到最新版本,看是否已修复。 - 向相关库提交 issue,提醒他们更新
torchaudio
的使用方式。
📦 检查版本
确保你使用的是较新的 torchaudio
:
pip show torchaudio
建议使用 torchaudio >= 2.1.0
。
总结
项目 | 建议 |
---|---|
是否启用新调度器 | ✅ 设置 TORCHAUDIO_USE_BACKEND_DISPATCHER=1 |
是否指定 backend | ✅ 在 load/info/save 中加 backend='soundfile' |
是否直接导入 backend | ❌ 避免使用 torchaudio.backend.sox_io_backend |
是否升级库 | ✅ 升级 torchaudio 和相关依赖 |