不知道为什么环境突然炸了,直接创建新环境重新安装

pip install --no-cache-dir \
  torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 \
  --index-url https://download.pytorch.org/whl/cu128

以下是问题分析


这就说明一件事:

pip show 的元数据看起来对上了,但你环境里的实际二进制库很可能还是脏的。

也就是:

  • 表面上:torch 2.8.0+cu128
  • 表面上:torchaudio 2.8.0+cu128
  • 但实际加载时:libtorchaudio.so 里的符号和当前 torch 不匹配

所以你才会出现这种很典型的情况:

pip show 看着没问题
import torchaudio 还是炸

这通常不是“版本号理解错了”,而是下面几种之一:

  1. 之前升级/降级残留了旧的 .so 文件
  2. conda 和 pip 混装过 torch 系列
  3. 当前 shell 进的不是你以为的那套环境
  4. site-packages 里库文件被覆盖得不干净

现在最关键的判断

你前面这条:

torch: 2.9.1 cuda: 12.8

和现在这条:

pip show torch -> 2.8.0+cu128

互相矛盾。

这说明你之前执行的那个 python 看到的 torch,和现在 pip show 看到的,很可能不是完全一致的一套状态

先不要猜,直接查这三个:

which python
which pip
python -c "import sys; print(sys.executable)"
python -c "import torch; print(torch.__version__, torch.__file__)"
pip show torch

如果:

  • which pip 不是当前 conda 环境里的 pip
  • pythonpip 指向不同环境

那就解释通了。


更重要的是:直接看实际导入到哪个库

跑这个:

python - <<'PY'
import torch
print("torch version:", torch.__version__)
print("torch file:", torch.__file__)

try:
    import torchaudio
    print("torchaudio version:", torchaudio.__version__)
    print("torchaudio file:", torchaudio.__file__)
except Exception as e:
    print("torchaudio import failed:", repr(e))
PY

这个比 pip show 更可信,因为它看的是运行时实际加载的包


我对你现在环境的判断

大概率是:

torchaudio 的共享库残留/污染了,即使 pip show 显示 2.8.0,也不代表 libtorchaudio.so 真的是一套干净匹配的 2.8.0。

你前面的错误:

undefined symbol: _ZNK3c106SymInt6sym_neERKS0_

本质还是二进制 ABI 不匹配,不是普通 Python 包版本号问题。


最稳的修法

不要只看 pip show,直接强制重装,而且要清缓存。

在你当前环境里执行:

pip uninstall -y torchaudio torchvision torch
pip cache purge

然后重新安装同源同版本:

pip install --no-cache-dir \
  torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 \
  --index-url https://download.pytorch.org/whl/cu128

这里加 --no-cache-dir 很重要,避免又把脏轮子/缓存装回去。


如果你以前用 conda 装过这几个,再补一步

先查:

conda list | grep -E "torch|torchaudio|torchvision"

如果里面也有 pytorch / torchaudio / torchvision,那说明你可能确实混装过。

这种情况下建议先删干净:

conda remove -y pytorch torchaudio torchvision
pip uninstall -y torch torchaudio torchvision

然后只保留 一种方式安装
对你这个项目,我更建议三件套都用 pip 官方 cu128 轮子。


重装后先只测这个

python - <<'PY'
import torch
import torchaudio
print("torch:", torch.__version__, torch.version.cuda)
print("torchaudio:", torchaudio.__version__)
print("cuda available:", torch.cuda.is_available())
PY

只要这一步过了,再测:

python - <<'PY'
import pyannote.audio
print("pyannote ok")
PY

再过了,WhisperX 初始化问题才有意义继续看。


你现在先别急着跑字幕脚本

顺序应该是:

  1. 先把 torch / torchaudio 导入修好
  2. 再测 pyannote.audio
  3. 再测 whisperx.load_model(...)
  4. 最后再回到双语字幕脚本

还有一个很现实的建议

如果你想最快跑通项目,而不是继续和 WhisperX/pyannote 环境搏斗,
那在 torch/torchaudio 修好后,我仍然建议你优先走:

faster-whisper + Silero VAD + 你自己的重切分 + 本地翻译

这条路线通常比 WhisperX 稳。

你先把这几个命令的输出贴来最有价值:

which python
which pip
python -c "import sys; print(sys.executable)"
python -c "import torch; print(torch.__version__, torch.__file__)"
conda list | grep -E "torch|torchaudio|torchvision"

找到了,根因已经很清楚了:

不是 WhisperX 本身,也不是 pyannote.audio 本身。是你的 torchtorchaudio 版本/编译不匹配。

你这条报错最关键的是:

libtorchaudio.so: undefined symbol: _ZNK3c106SymInt6sym_neERKS0_

这类 undefined symbol 基本就等于:

torchaudio 是按另一版 torch 编出来的,和你当前装着的 torch ABI 对不上。

pyannote.audio 依赖 torchaudio,所以:

  • import torchaudio 先炸
  • import pyannote.audio 也跟着炸
  • WhisperX 默认会碰到 pyannote/torchaudio,于是初始化也炸

你现在的真正问题链路

现在的链路是:

WhisperX
 -> pyannote.audio
 -> torchaudio
 -> libtorchaudio.so
 -> 和当前 torch 2.9.1 不匹配
 -> 崩溃 / bad_alloc / core dumped

所以这次不是继续改脚本,而是先把 torch / torchaudio 修成同一套


最稳的修法

方案 A:统一重装 torch / torchaudio

先看你当前装的是混来的还是同源安装的。最省事的做法是直接卸掉重装。

先执行:

pip uninstall -y torchaudio torch torchvision

如果你之前也用 conda 装过,再执行:

conda remove -y torchaudio torch torchvision

然后用同一种方式重装,别 conda/pip 混着给这几个核心包装。


我建议你先用 PyTorch 官方 pip 轮子统一装

你现在是 CUDA 12.8 环境,直接装匹配的一套。

如果你要继续用 torch 2.9.x

那就把三件套一起装:

pip install torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu128

装完验证:

python - <<'PY'
import torch, torchaudio
print("torch:", torch.__version__, "cuda:", torch.version.cuda)
print("torchaudio:", torchaudio.__version__)
print("cuda available:", torch.cuda.is_available())
PY

只要 import torchaudio 不再报错,就说明核心问题修好了。


更稳的方案 B:降到更常见的一套

如果你不执着 2.9.1,我更建议你装一套更常见、更稳的版本组合。
核心原则只有一个:

torchtorchaudio 必须同大版本、同来源、同 CUDA 轮子。

比如统一装 2.8 系列:

pip uninstall -y torchaudio torch torchvision
pip install torch==2.8.0 torchaudio==2.8.0 torchvision==0.23.0 --index-url https://download.pytorch.org/whl/cu128

很重要:不要再混装这几个核心包

最常见踩坑方式就是:

  • conda 装了 torch
  • pip 又装了 torchaudio
  • 或者反过来

这样最容易出现你这种:

libtorchaudio.so undefined symbol

所以对这三个包:

  • torch
  • torchaudio
  • torchvision

要么全 conda,要么全 pip。


修好后先验证这三步

1

python -c "import torchaudio; print(torchaudio.__version__)"

2

python - <<'PY'
import pyannote.audio
print("pyannote ok")
PY

3

python - <<'PY'
import whisperx
print("whisperx ok")
PY

这三步都过了,再回去跑你的字幕脚本。


关于那个 warning

PYTORCH_CUDA_ALLOC_CONF is deprecated, use PYTORCH_ALLOC_CONF instead

这个不是主因,可以先忽略。
只是环境变量名变了,不会导致你现在这个 libtorchaudio.so 错误。


你现在最短路径

我建议你直接这样做:

pip uninstall -y torchaudio torch torchvision
pip install torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu128

然后立刻测试:

python - <<'PY'
import torch, torchaudio
print(torch.__version__, torch.version.cuda)
print(torchaudio.__version__)
PY

如果这一步过了,你的 pyannote.audio 大概率也会跟着恢复正常。

你把这一步执行后的输出贴来,我可以继续帮你确认接下来 WhisperX 那个脚本该怎么跑最稳。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐