TypeError: expected str

这个 TypeError: expected str, bytes or os.PathLike object, not NoneType 通常出现在 Linux 上手动设置 LD_LIBRARY_PATH 、尝试加载 nvidia-cublas-cu12 / nvidia-cudnn-cu12 动

快速结论:这个 TypeError: expected str, bytes or os.PathLike object, not NoneType 通常出现在 Linux 上手动设置 LD_LIBRARY_PATH、尝试加载 nvidia-cublas-cu12 / nvidia-cudnn-cu12 动态库路径时,根因是这两个包的子模块不再稳定暴露 __file__。优先改用基于 __path__ 的路径推导命令,而不是继续排查 Faster Whisper 本身。

适用环境:Issue 已确认:Linux Mint、独立 conda 环境、通过 pip 安装 nvidia-cublas-cu12 和 nvidia-cudnn-cu12==9.*。Issue 未提供 Python、CUDA、PyTorch、显卡型号等具体版本,本文不补充。

最快修复方案:用下面这条已验证命令替换原来的 export LD_LIBRARY_PATH=...:

export LD_LIBRARY_PATH=$(python3 -c 'import os, nvidia.cublas, nvidia.cudnn; print(os.path.dirname(nvidia.cublas.__path__[0]) + "/cublas/lib:" + os.path.dirname(nvidia.cudnn.__path__[0]) + "/cudnn/lib")')

注意事项:该命令只解决环境变量拼接阶段的 NoneType 报错,不等同于解决所有 CUDA 安装问题;Issue 中维护者也明确表示,这类 CUDA 依赖问题无法在仓库侧完全修复而不影响其他包。若仍失败,可优先尝试用 Docker 容器运行 CUDA 环境,Issue 中报告者用这种方式成功跑通。

问题场景

用户在 Linux Mint 的独立 conda 环境中安装 Faster Whisper。安装 nvidia-cublas-cu12、nvidia-cudnn-cu12==9.* 之后,为了在运行时找到 cuBLAS / cuDNN 动态库,执行了一条通过 Python 导入 nvidia.cublas.lib 与 nvidia.cudnn.lib 来拼接 LD_LIBRARY_PATH 的命令,结果在 Python 表达式阶段就报错,安装流程中断。用户还提到整体安装过程非常脆弱:先装 transformers 而不显式安装 cuBLAS / cuDNN 曾成功过一次,但同一台机器一周后无法复现。

报错原文

Traceback (most recent call last):
  File "", line 1, in 
  File "", line 152, in dirname
TypeError: expected str, bytes or os.PathLike object, not NoneType

原因分析

最可能的原因是 nvidia-cublas-cu12 和 nvidia-cudnn-cu12 新版本的包结构发生了变化:其子模块变成命名空间形式,或者不再显式声明 __file__ 属性,导致 nvidia.cublas.lib.__file__、nvidia.cudnn.lib.__file__ 返回 None。随后代码把这个 None 传给 os.path.dirname(),于是抛出 TypeError。

需要区分的是:这个报错发生在设置环境变量的辅助命令里,不是 Faster Whisper 推理阶段直接抛出的异常。Faster Whisper 仓库本身对该问题的可操作空间有限,Issue 中维护者说明,如果强行在仓库里处理,可能会破坏大多数其他包的兼容性。

环境排查

  • 确认是否在 Linux 独立 conda 环境中运行,并确认当前环境已激活。
  • 确认已安装 nvidia-cublas-cu12 和 nvidia-cudnn-cu12==9.*,或确认是否曾尝试先装 transformers 的路径。
  • 确认原命令中导入的是 nvidia.cublas.lib、nvidia.cudnn.lib,还是改用 nvidia.cublas、nvidia.cudnn 的 __path__ 方式。
  • Issue 未提供 Python、CUDA、PyTorch、显卡驱动具体版本,暂不列为必查项,但排查时建议记录以便复现。
  • 如果本机重复失败,评估是否能改用 Docker 容器运行,Issue 中报告者在容器中成功处理了 CUDA。

解决步骤

  1. 不要继续使用原来的 nvidia.cublas.lib.__file__ 路径推导命令,因为该属性在新版包中可能返回 None。
  2. 改用 Issue 中已验证的更新命令,通过 nvidia.cublas.__path__[0] 和 nvidia.cudnn.__path__[0] 推算出库目录,并拼成 LD_LIBRARY_PATH:
    export LD_LIBRARY_PATH=$(python3 -c 'import os, nvidia.cublas, nvidia.cudnn; print(os.path.dirname(nvidia.cublas.__path__[0]) + "/cublas/lib:" + os.path.dirname(nvidia.cudnn.__path__[0]) + "/cudnn/lib")')
  3. 如果只是想临时验证 Faster Whisper 能否运行,也可以可优先尝试 Issue 中提到的绕法:先安装 transformers,不显式安装 cuBLAS / cuDNN。注意该做法在报告者本机上未能稳定复现,只适合作为尝试项。
  4. 若上述路径方式仍无法得到可用的 CUDA 环境,可优先尝试在 Docker 容器中运行 Faster Whisper,Issue 中报告者通过该方式成功处理了 CUDA 环境。
  5. 关注上游修复:报告者已向 Faster Whisper 提交 PR #1459,后续版本可能包含相关调整。

验证方法

执行新的 export LD_LIBRARY_PATH=... 命令时,不再出现 TypeError: expected str, bytes or os.PathLike object, not NoneType,并且能打印出包含 cublas/lib 与 cudnn/lib 的路径。随后在该环境下运行 Faster Whisper 推理,确认能够正常加载模型并完成转写,而不是再回落到 CPU 或直接报动态库缺失。若使用 Docker 方案,则以容器内成功运行 Faster Whisper 为准。

参考来源

SYSTRAN/faster-whisper #1320

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27356

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注