安装mmcv编译失败求助:MSVC cl.exe退出状态2(CascadeTabNet适配)
CascadeTabNet复现中mmcv编译失败的解决建议
环境说明
Win11系统,Python 3.8、PyTorch 1.4.0、torchvision 0.5.0,仅CPU运行,复现GitHub表格识别项目CascadeTabNet时,安装mmcv出现编译失败,报错信息如下:
d:\academic\internship\python\lib\site-packages\torch\include\ATen\core\TensorMethods.h(1417): note: 参见“at::Tensor::index”的声明 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(40): note: 尝试匹配参数列表“(initializer list)”时 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(41): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(41): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(42): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(42): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(44): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(44): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(45): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(45): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(45): error C2664: “at::Tensor at::Tensor::index(at::TensorList) const”: 无法将参数 1 从“initializer list”转换为“at::TensorList” ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(45): note: 无构造函数可以接受源类型,或构造函数重载决策不明确 d:\academic\internship\python\lib\site-packages\torch\include\ATen\core\TensorMethods.h(1417): note: 参见“at::Tensor::index”的声明 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(45): note: 尝试匹配参数列表“(initializer list)”时 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(46): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(46): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(47): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(47): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(49): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(49): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(49): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(51): error C2065: “None”: 未声明的标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(51): error C3861: “Slice”: 找不到标识符 ./mmcv/ops/csrc/pytorch/cpu\bbox_overlaps_cpu.cpp(51): error C2065: “None”: 未声明的标识符 error: command 'D:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for mmcv Running setup.py clean for mmcv Failed to build mmcv ERROR: Could not build wheels for mmcv, which is required to install pyproject.toml-based projects
解决建议
安装PyTorch1.4.0兼容的mmcv版本:报错核心是新mmcv使用的C++ API在PyTorch1.4.0中不存在(如
Slice、None的定义)。需安装对应版本的mmcv-full,比如mmcv-full==1.2.7,执行命令:pip install mmcv-full==1.2.7若仍有问题,可直接安装对应CPU版本的预编译包,避免源码编译的兼容性问题。
更换VS编译器版本:当前使用VS2022编译器,其版本过高,与PyTorch1.4.0的头文件兼容性差。建议安装VS2019的Build Tools,配置环境变量让
cl.exe指向VS2019的编译器路径,再重新尝试安装。手动修改mmcv源码(临时方案):打开报错的
bbox_overlaps_cpu.cpp文件,将所有Slice替换为at::Slice,None替换为at::NoTensor(),并在文件开头添加using namespace at;,再重新执行安装命令。此方法需逐个修改报错文件,适合临时应急。确认环境位数一致性:检查Python、PyTorch、VS编译器均为64位,避免因架构不匹配导致的编译失败。
内容的提问来源于stack exchange,提问作者jieyv lee
相关产品推荐
相关产品推荐

