1、分析代码,用到了哪些依赖包;
2、新建一个虚拟环境,然后把需要的包安装上;
3、激活虚拟环境,在虚拟环境上测试,测试没用问题就进行正式打包
说明:新建虚拟环境是打包后exe小的关键所在,因为要不然使用默认环境会把你所有包都编译一遍,不仅耗时长、打包出来的exe文件特别大、打包过程中各种问题层出不穷,可能那些包你都没用用到,但是报错了,你不得不花很多时间来解决这些问题。
什么,不会虚拟环境,不会打包?这里可以参考我之前写的文章:
1)从零开始,python打包工具pyinstaller的使用及踩过的坑
2)python三种虚拟环境安装方法和tensorflow1.12安装
按照参考资料基本上就很容易打包成功了
pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.py#打包成一个文件,控制台无界面的程序
但是运行出错,错误信息如下:
[34900] WARNING: file already exists but should not: C:\Users\ADMINI~1\AppData\Local\Temp\_MEI349002\torch\_C.cp37-win_amd64.pyd
Traceback (most recent call last):
File "run_ship_rotate.py", line 10, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmdet\apis\__init__.py", line 1, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmdet\apis\inference.py", line 4, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmcv\__init__.py", line 4, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmcv\fileio\__init__.py", line 4, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmcv\fileio\io.py", line 4, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmcv\utils\__init__.py", line 3, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "mmcv\utils\env.py", line 2, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "torch\__init__.py", line 81, in <module>
ImportError: DLL load failed: 找不到指定的模块。
[36664] Failed to execute script 'run_ship_rotate' due to unhandled exception!
问题描述:有一个WARNING,和一堆错误
按照网上的方法,查看你编译的代码哪一行有问题,就在编译的spec文件中增加哪个包,于是修改spec文件,增加了一大堆
继续打包
pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec
编译出来运行WARNING,但是错误问题依旧,然后仔细分析问题,发现最终的错误是在这两个文件上,最终根据这个路径,找到文件中的出错代码点
定位问题代码:
根据最后一个,“from torch._c import * ”这个代码百度搜索错误原因,找到解决方案:
参考:https://blog.csdn.net/ewqapple/article/details/86155286
把虚拟环境的环境遍历设置了个遍
在系统“PATH”里面增加了如下的环境变量,解决了torch
继续打包
pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec
注意:
最后移植的时候发现把exe拷贝过去没啥用,还是报这个错误,主要是要把下面这个路径拷贝到新电脑,然后设置为环境变量就OK了
C:\Anaconda3\envs\simp37\Library\bin
编译完成后还是出错,问题:
OSError: Can't get source for C:\Users\ADMINI~1\AppData\Local\Temp\_MEI348442\torchvision\ops\misc.pyc. TorchScript requires source access in order to carry out compilation. Make sure original .py files are available. Original error: could not get source code
[27976] Failed to execute script 'run_ship_rotate' due to unhandled exception!
仔细研究后如下红色框位置,判断肯定是torchvision问题
于是查看版本:torch版本1.3.1 torchvision版本0.4.2,网上查了对应版本号没啥问题
解决方案:
降低torchvision版本,参考网上:https://blog.csdn.net/jacke121/article/details/104986360
卸载现有版本,按照低版本
pip uninstall torchvision
pip install torchvision==0.2.2.post3
继续打包
pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec
编译后的执行程序可以正常执行了。
这个问题困了我一天,终于干掉了,特此记录。