使用pyinstaller将opencv和pytorch-cpu版本共同打包成exe

项目场景:

最近,由于一个项目的要求,需要把基于pytorch做的一个图片分类程序做成exe,使其能在其他未装pytorch和opencv机器上使用。

问题描述:

操作系统:win10
环境:anaconda+pytorch 1.0+torchvision 0.2.2 +opencv 4.0+
使用pyinstaller打包的过程中,出现了很多问题。
首先,出现无法安装pytorch 1.7 cpu+python 3.7的问题,解决方案很简单,本身也不需要用那么高版本的pytorch,降低版本就好了。

最难解决的问题还是使用pyinstaller将opencv和pytorch打包后,在本地能完美运行,在其他之前装有pytorch的电脑上也能运行,但是在一台完全没装过pytorch的电脑会报以下的错误(直接运行打包生成exe,窗口会一闪而过,需在cmd或者powershell运行exe才能看到详细报错信息)。

使用以下命令打包过程,由于未将torch\lib打包会报错!!!

pyinstaller main.py -p 'E:\Program Files\Anaconda3\envs\pyi\Lib\site-packages' -p  --hidden-import torchvision --hidden-import numpy --hidden-import cv2
Traceback (most recent call last):
  File "main.py", line 5, in 
  File "e:\program files\anaconda3\envs\pyi\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in ex
ec_module
  File "utils.py", line 6, in 
  File "e:\program files\anaconda3\envs\pyi\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in ex
ec_module
  File "torchvision\__init__.py", line 1, in 
  File "e:\program files\anaconda3\envs\pyi\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in ex
ec_module
  File "torchvision\models\__init__.py", line 1, in 
  File "e:\program files\anaconda3\envs\pyi\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in ex
ec_module
  File "torchvision\models\alexnet.py", line 1, in 
  File "e:\program files\anaconda3\envs\pyi\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in ex
ec_module
  File "torch\__init__.py", line 102, in 
ImportError: DLL load failed: 找不到指定的模块。
[1032] Failed to execute script main

原因分析:

从报错信息来看,似乎是torchvision在打包后,无法正确找到torch的lib。

解决方案:

使用以下命令,将anaconda环境中的torch的lib也给打包进生成的程序里,多加一条 -p 'E:\Program Files\Anaconda3\envs\pyi\Lib\site-packages\torch\lib’完美解决。

pyinstaller main.py -p 'E:\Program Files\Anaconda3\envs\pyi\Lib\site-packages' -p 'E:\Program Files\Anaconda3\envs\pyi\Lib\site-packages\torch\lib' --hidden-import torchvision --hidden-import numpy --hidden-import cv2

你可能感兴趣的:(使用pyinstaller将opencv和pytorch-cpu版本共同打包成exe)