项目要做身份证识别,找了半天还是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.lib
在C:\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.lib
在C:\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.exe
在C:\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安装成功。文章来源:https://www.toymoban.com/news/detail-423313.html
后记
- 这里其实还是有些不理解,本地安装这些类似的依赖C++的python类库是不是都需要这么折腾,怎么才能配置一个较好的C++编译生成环境?
- python疑难包安装总会遇到,基本思路就是采用源码安装,具体问题具体解决了。
我没有创造知识,只是串联大佬们的经验,解决了自己的问题,记录下来。文章来源地址https://www.toymoban.com/news/detail-423313.html
参考博客
- 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安装lanms-neo问题处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!