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

如何修复解析torch版本返回None触发的TypeError报错

问题说明

Windows 11 + Python 3.9.7 [MSC v.1916 64 bit (AMD64)]环境下,测试torch 1.10.2、torch 1.11.0两个版本时,执行version.parse(importlib_metadata.version("torch"))返回None,触发如下报错:

Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\IPython\core\interactiveshell.py", line 3457, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-1-c243c65504c9>", line 1, in <module>
    version.parse(importlib_metadata.version("torch"))
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\packaging\version.py", line 49, in parse
    return Version(version)
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\packaging\version.py", line 264, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object

导入bertopic等依赖torch的第三方库时,会在transformers的依赖检查逻辑中触发相同错误,完整栈如下:

Traceback (most recent call last):
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\__init__.py", line 1, in <module>
    from bertopic._bertopic import BERTopic
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\_bertopic.py", line 31, in <module>
    from bertopic.backend._utils import select_backend
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\backend\__init__.py", line 2, in <module>
    from ._word_doc import WordDocEmbedder
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\backend\_word_doc.py", line 4, in <module>
    from bertopic.backend._utils import select_backend
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\backend\_utils.py", line 2, in <module>
    from ._sentencetransformers import SentenceTransformerBackend
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\bertopic\backend\_sentencetransformers.py", line 3, in <module>
    from sentence_transformers import SentenceTransformer
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\sentence_transformers\__init__.py", line 3, in <module>
    from .datasets import SentencesDataset, ParallelSentencesDataset
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\sentence_transformers\datasets\__init__.py", line 3, in <module>
    from .ParallelSentencesDataset import ParallelSentencesDataset
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\sentence_transformers\datasets\ParallelSentencesDataset.py", line 4, in <module>
    from .. import SentenceTransformer
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\sentence_transformers\SentenceTransformer.py", line 11, in <module>
    import transformers
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\transformers\__init__.py", line 30, in <module>
    from . import dependency_versions_check
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\transformers\dependency_versions_check.py", line 17, in <module>
    from .utils.versions import require_version, require_version_core
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\transformers\utils\__init__.py", line 33, in <module>
    from .generic import (
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\transformers\utils\generic.py", line 28, in <module>
    from .import_utils import is_flax_available, is_tf_available, is_torch_available, is_torch_fx_proxy
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\transformers\utils\import_utils.py", line 350, in <module>
    torch_version = version.parse(importlib_metadata.version("torch"))
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\packaging\version.py", line 49, in parse
    return Version(version)
  File "C:\ProgramData\Anaconda3\envs\SentiAnalysis\lib\site-packages\packaging\version.py", line 264, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object
报错原因

报错核心是version.parse()接收到的入参为None,不符合函数要求的字符串/字节类型入参。
该场景下importlib_metadata.version("torch")返回None只有两个常见诱因:

  • 环境内importlib_metadata版本过高(5.x及以上),和1.10.x、1.11.x系列旧版torch的元数据格式不兼容,无法正常读取版本号
  • torch安装过程中断或源文件损坏,缺失了存储版本信息的dist-info元数据文件
修复方案

按优先级尝试以下操作:

  1. 降级importlib_metadata到兼容版本
    激活SentiAnalysis conda环境,执行命令:
    pip install importlib_metadata==4.13.0
    
    降级完成后,先在交互环境执行importlib_metadata.version("torch"),确认返回类似1.10.2的正常版本字符串后,再导入相关依赖即可。
  2. 降级无效时重装torch修复元数据
    先彻底卸载现有torch:
    # pip安装的torch执行该命令卸载
    pip uninstall -y torch
    # conda安装的torch执行该命令卸载
    conda remove -y pytorch torchvision torchaudio pytorch-cuda
    
    卸载完成后重新安装对应版本的torch,安装完成后先验证版本读取正常,再运行业务代码。
  3. 紧急临时绕过方案
    若需要快速恢复业务运行,可直接修改依赖代码跳过版本检查:
    找到报错路径下的transformers/utils/import_utils.py文件,定位到350行附近的代码:
    torch_version = version.parse(importlib_metadata.version("torch"))
    
    注释原代码,手动指定当前安装的torch版本:
    # 替换为实际安装的torch版本号
    torch_version = version.parse("1.11.0")
    
    该修改会在transformers包升级后被覆盖,仅适合临时救急使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:39:19