11.pyinstaller打包案例(涉及cv2在windows2012执行不了)

前言

工作中遇到需要把一段python代码在内网windows2012上运行。

一、打包工具

由于属于内网+服务器运行,对代码保护要求不高,就选择了pyinstaller。
第一次使用的命令:
pyinstaller -Fw pro.py

二、错误调试(pyinstaller debug)

-Fw属于正式版本,不带调试信息;第一次打包很容易遇到路径、加载等问题;

错误信息如下:
Failed to execute script xxx

11.pyinstaller打包案例(涉及cv2在windows2012执行不了)_第1张图片
调试解决办法,把打包参数去掉’w’
pyinstaller -F pro.py
用cmd执行就可以再cmd打出调试信息

三、提示找不到cv2

执行打包程序提示:

    import cv2
  File "XXX\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "cv2\__init__.py", line 181, in <module>
  File "cv2\__init__.py", line 111, in bootstrap
  File "cv2\__init__.py", line 109, in load_first_config
ImportError: OpenCV loader: missing configuration file: ['config.py']. Check OpenCV installation.
[14080] Failed to execute script processOpenCode

是由于cv2与一般模块加载方式不一样导致的,需要手动指定加载路径

pyinstaller -F pro.py --path="xxx\Lib\site-packages\cv2"

网上很多地方提示用“–paths=”实测这样是无效的,应该用“–path=”参数打包。

四、发布到windows2012

再打包环境能够执行,但是发布到windows2012提示cv2找不到错误:

import cv2
****
ImportError: DLL load failed: 找不到指定的模块。

在windows10 能够执行,而到win2012不能够执行,涉及cv2;这个原因是2012为服务器,默认关闭桌面相关的东西,cv2为图形方面的工具,缺少桌面相关依赖。解决办法是打开2012桌面体验:

来源:https://www.rrbay.com/spec/pyinstaller-cv2

通过depends查看,缺少api-ms-win-downlevel-advapi32-l1-1-0.dll、api-ms-win-downlevel-advapi32-l1-1-0.dll、api-ms-win-downlevel-shlwapi-l1-1-0.dll和msIso.dll,这些问题可以通过下面安装桌面体验解决:
windows 2008 打开服务器管理器,右上角点“管理”-->添加角色和功能。点“服务器选择”-->“功能”,拖动条拖到最下面,勾选“桌面体验”,点“安装”按钮
windows 2012 打开服务器管理器,右上角点“管理”-->添加角色和功能。点“服务器选择”-->“功能”,拖动条拖到最下面,点开“用户界面和基础结构”,勾选“桌面体验”,点“安装”按钮

11.pyinstaller打包案例(涉及cv2在windows2012执行不了)_第2张图片

五、打包成文件夹、单exe性能对比

去掉-F则打包问文件夹
两个对比:启动性能相差3秒,文件夹模式的4秒执行完成;单exe需要7秒以上;当然不同环境下,性能相差有一点,但是整体性能文件夹模式由于单exe:
原因:单exe需要对exe中进行解压才能够执行完成。耗时在于此。

你可能感兴趣的:(Python打包,linux,运维,服务器)