windows安装lanms-neo问题处理

文章目录

      • 第1关 Install fails: No module named 'pybind11'
      • 第2关 pybind11 requires MSVC 2015 update 3 or newer
      • 第3关 Cannot open include file: 'vector.h': No such file or directory
      • 第4关 fatal error LNK1104: 无法打开文件“kernel32.lib”
      • 第5关 LINK : fatal error LNK1158: 无法运行“rc.exe”
      • 后记
      • 参考博客

项目要做身份证识别,找了半天还是PaddleOCR比较完善,支持的backbone也比较多。但是安装过程可就不怎么顺利了,主要是有一个依赖包lanms-neo安装出现了问题。别无他法,具体问题具体分析解决。Python解决包安装问题,还是源码安装比较方便,可以直接看到详细的错误原因。于是下载lanms-neo源码包,解压安装,下面就跟我一个一个打怪闯关吧。

第1关 Install fails: No module named ‘pybind11’

这个问题很简单,就是没有安装pybind11这个模块,直接安装就是了。我于是安装了最新版本
pip install pybind11
再次运行提示
pybind11 requires MSVC 2015 update 3 or newer
本机之前装过VS2015的C++构建组件,但不知道是哪个版本。既然最新版本的pybind11要求这个,那我装个低版本吧。在pybind11的发布日志里,没有找到准确的各个版本的MSVC依赖版本说明。但是尝试安装2.6.0及以下版本时,提示
找不到pybind11.setup_helpers
那看来只能是2.6.0以上的版本了,那就解决
pybind11 requires MSVC 2015 update 3 or newer的问题吧

总结

  • 依赖pybind11>2.6.0,否则找不到pybind11.setup_helpers
  • pybind11要求本机MSVC2015 Update 3或者更新的版本,否则提示pybind11 requires MSVC 2015 update 3 or newer
  • 另外MSVC版本和Visual C++版本不是一回事

第2关 pybind11 requires MSVC 2015 update 3 or newer

这个问题其实在外网环境很简单,在线安装VS215 update3 or newer版本的即可。但是内网环境就很悲催了,VS目前不再提供离线安装包了,因此只能自己在外网环境制作离线安装包。离线安装包制作可以搜到很多,这里不详细介绍,总之曲曲折折终于搞到了VS2019的C++编译工具的离线安装包。

欣喜的手抖,一点还是来了一个错误:安装程序一闪而过,再点还是一闪而过,再点还是一闪而过。在网上找了个解决方法,还挺奏效:

需要到“控制面板/添加和管理程序”关闭系统自带的netframework3.x及以上版本。

1、查看所有功能项:
dism /online /Get-Features

2、如果dism执行返回“错误:87”,则需要修复dism命令
Dism /Online /Cleanup-Image /ScanHealth
Dism /Online /Cleanup-Image /RestoreHealth

3、执行禁用命令:
Dism /online /Disable-Feature /FeatureName:NetFx3
Dism /online /Disable-Feature /FeatureName:NetFx4-AdvSrvs

完成上述操作后,重新执行安装程序,果然问题解决。

后续
这里还有个遗留问题,就是本地有些依赖.net 3.5的程序,在禁用.net 3.5之后无法正常使用了。但是启用时,由于内网找不到组件对应的包源,又无法正常启用。这个最终是获取了win10系统对应版本的.net 3.5的cab包,使用以下命令启用成功:
DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\source\sxs
D:\source\sxs这里就是我下载的cab包的放置位置。

第3关 Cannot open include file: ‘vector.h’: No such file or directory

这里我理解就是在进行C++代码编译时,找不到需要的头文件了。lanms-neo源码包的setup.py文件中有include_dirs的设置,那就好解决了,把对应的找不到的include文件的路径配置到这里就可以了。

原include_dirs设置:

extensions_dir = path.join(this_dir, "lanms", "csrc")

ext_modules = [
   Pybind11Extension(
      'lanms._C',
      sorted(glob('lanms/csrc/*.cpp')) + sorted(glob('lanms/csrc/clipper/*.cpp')),
      include_dirs=[extensions_dir],
   )
]

修改后include_dirs设置:

include_dirs = [extensions_dir,
                 "D:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\include"]
                 
                 
 ext_modules = [
     Pybind11Extension(
         'lanms._C',
         sorted(glob('lanms/csrc/*.cpp')) + sorted(glob('lanms/csrc/clipper/*.cpp')),
         include_dirs=include_dirs,
     )
 ]

本机vs2019安装在D:\Program Files (x86)

  • vector.h文件在D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include

类似问题:

  • “corecrt.h”: No such file or directory:corecrt.h在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt(windows kit安装路径下)
  • “math.h”: No such file or directory:match.h在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt(windows kit安装路径下)
  • “basetsd.h”: No such file or directory:basetsd.h在C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared(windows kit安装路径下)
    以上关于头文件找不到的问题,均可以通过配置setup.py文件中的include文件路径解决。

第4关 fatal error LNK1104: 无法打开文件“kernel32.lib”

上面的问题理解了,这个问题其实很简单了,就是C++编译找不到链接库了。看一下报错信息,找到一个合适的链接库查找路径,把对应库放进去就行了。

kernel32.libC:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64路径下(windows kit安装路径下)。我这里使用的virtualenv虚拟环境,我看报错信息里,第一个查找路径就是我的虚拟环境下
C:\virtualenv\paddleocr\libs
于是在paddleocr下创建libs文件夹,并拷贝kernel32.lib到该文件夹下即可。

类似问题:
fatal error LNK1104: 无法打开文件“ucrt.lib”:ucrt.libC:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64(windows kit安装路径下)
以上关于链接库找不到的问题,均可以通过拷贝对应库文件到默认的库查找路径解决。

第5关 LINK : fatal error LNK1158: 无法运行“rc.exe”

这个其实还是在默认路径没有找到相关文件的问题,仔细看错误提示,VS2019下的link.exe无法找到rc.exe可执行程序,那就拷贝这个文件到link.exe所在路径即可。

rc.exeC:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64下,拷贝到link.exe所在目录D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x64

至此,lanms-neo安装成功。

后记

  1. 这里其实还是有些不理解,本地安装这些类似的依赖C++的python类库是不是都需要这么折腾,怎么才能配置一个较好的C++编译生成环境?
  2. python疑难包安装总会遇到,基本思路就是采用源码安装,具体问题具体解决了。

我没有创造知识,只是串联大佬们的经验,解决了自己的问题,记录下来。

参考博客

  • Windows安装Openmmlab 出现的问题
  • 无法打开包括文件: “corecrt.h”: No such file or directory
  • 已解决:fatal error C1189: #error: pybind11 requires MSVC 2015 update 3 or newer
  • VSCode配置C++环境的方法步骤(MSVC)
  • VisualStudio Build Tools 2017离线安装程序
  • 安装VS时,双击setup.exe后界面一闪而过的问题
  • Win10系统离线安装.net3.5失败:找不到源文件,原因及解决方法

你可能感兴趣的:(windows,python,人工智能)