一、背景:
我自己写了一个python脚本,要放到远程电脑上用,怎么办?
参考网上的做法,我应该按照python installer,打包发布;但是没有成功;后面再研究下,如果有进展我再更新。
退而求其次,我只能把我本地的开发环境搬到那台远程电脑上运行了。按照我的设想,应该是非常轻松愉快的,结果却不是这样,我遇到了import cv2报错的问题,在网上找了多种解决方案都无效,好在最后都解决了,下面将我的过程简要记录并分享出来,希望对大家有帮助,主要是提供一个解决问题的思路,别走错方向了。
二、部署步骤:
1、安装anconda
2、新建工作环境(关注python版本,最好跟自己的一样,以免出现其他问题)
3、增加清华的源
4、用pip来按照需要的库
三、出现的问题及解决过程:
pip install opencv-python之后,运行脚本,报错:
from .cv2 import *
ImportError: DLL load failed: 找不到指定的模块。
在网上搜了一些资料,都说不到点子上。无奈只好自己研究。
原因是win7系统缺少某些动态库文件,具体是缺少哪个动态库呢?
就要用到工具depends22_x86来分析了:
depends22_x86分析cv2.cp37-win32.pyd的依赖动态库,看系统缺哪些库。
cv2.cp37-win32.pyd路径:
C:\ProgramData\Anaconda3\Lib\site-packages\cv2\cv2.cp37-win32.pyd
分析结果如下,缺少下面的三个库,第一个最重要:
API-MS-WIN-DOWNLEVEL-SHLWAPI-L1-1-0.DLL
PYTHON37.DLL
IESHIMS.DLL
那么到哪里去找合适的库(API-MS-WIN-DOWNLEVEL-SHLWAPI-L1-1-0.DLL)?
1)刚开始搜到脚本之家上面的库,下载注册
到脚本之家下载库,并在系统中注册
https://www.jb51.net/dll/72355.html#downintro2
@echo 开始注册
copy api-ms-win-downlevel-shlwapi-l1-1-0.dll %windir%\system32\
regsvr32 %windir%\system32\api-ms-win-downlevel-shlwapi-l1-1-0.dll /s
@echo api-ms-win-downlevel-shlwapi-l1-1-0.dll注册成功
@pause
这样就把动态库安装好了,运行在python中import cv2出现下面的错误。
from .cv2 import *
ImportError: DL load failed: %1 不是有效的 Win32 应用程序。
原因是下载的动态库不适合当前的系统,只能再想其他办法了。
2)这次找到了https://www.dll-files.com/ 这个网站,上面可以搜到我们要的库
a。修复方法1,下载它提供的工具自动修复,但是需要钱
修复dll缺失的工具:
https://www.jb51.net/softjc/604843.html
b。修复方法2,对于不想花钱的我,只能手动下载并安装了。
https://www.dll-files.com/ 到这个网站下载缺失的dll
32 bit
总结:
cv2 import failed due to api-ms-win-downlevel-shlwapi-l1-1-0.dll missing
fix method:
1. get which dll is missing by tool depends22_x86
2. download the responding dll file file web https://www.dll-files.com/
3. regist the dll by dll.bat