python 虚拟环境打包exe方法及路过的坑

目录

    • 1、虚拟环境打包
      • 1.1打包流程
      • 1.2参考资料
    • 2、打成功但是运行出错
      • 2.1问题分析:
      • 2.2、修改spec文件后重新打包
      • 2.3、设置虚拟环境的环境变量后重新打包
      • 2.4、降低问题包的版本后重新打包

这是个python 打包的问题,关于python打包心得更多了,小白打包往往把一个很简单的程序打包成几百兆,但是现在我觉得完全没用必要。打包也可以很简单,方法如下:

1、虚拟环境打包

1.1打包流程

1、分析代码,用到了哪些依赖包;
2、新建一个虚拟环境,然后把需要的包安装上;
3、激活虚拟环境,在虚拟环境上测试,测试没用问题就进行正式打包
说明:新建虚拟环境是打包后exe小的关键所在,因为要不然使用默认环境会把你所有包都编译一遍,不仅耗时长、打包出来的exe文件特别大、打包过程中各种问题层出不穷,可能那些包你都没用用到,但是报错了,你不得不花很多时间来解决这些问题。

1.2参考资料

什么,不会虚拟环境,不会打包?这里可以参考我之前写的文章:
1)从零开始,python打包工具pyinstaller的使用及踩过的坑
2)python三种虚拟环境安装方法和tensorflow1.12安装

2、打成功但是运行出错

按照参考资料基本上就很容易打包成功了

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.py#打包成一个文件,控制台无界面的程序

打包成功:python 虚拟环境打包exe方法及路过的坑_第1张图片

但是运行出错,错误信息如下:

[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!

python 虚拟环境打包exe方法及路过的坑_第2张图片

2.1问题分析:

问题描述:有一个WARNING,和一堆错误

2.2、修改spec文件后重新打包

按照网上的方法,查看你编译的代码哪一行有问题,就在编译的spec文件中增加哪个包,于是修改spec文件,增加了一大堆
python 虚拟环境打包exe方法及路过的坑_第3张图片

继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

2.3、设置虚拟环境的环境变量后重新打包

编译出来运行WARNING,但是错误问题依旧,然后仔细分析问题,发现最终的错误是在这两个文件上,最终根据这个路径,找到文件中的出错代码点
python 虚拟环境打包exe方法及路过的坑_第4张图片
定位问题代码:
python 虚拟环境打包exe方法及路过的坑_第5张图片

python 虚拟环境打包exe方法及路过的坑_第6张图片

python 虚拟环境打包exe方法及路过的坑_第7张图片
python 虚拟环境打包exe方法及路过的坑_第8张图片
根据最后一个,“from torch._c import * ”这个代码百度搜索错误原因,找到解决方案:

参考:https://blog.csdn.net/ewqapple/article/details/86155286
把虚拟环境的环境遍历设置了个遍
在系统“PATH”里面增加了如下的环境变量,解决了torch
python 虚拟环境打包exe方法及路过的坑_第9张图片
继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

注意:
最后移植的时候发现把exe拷贝过去没啥用,还是报这个错误,主要是要把下面这个路径拷贝到新电脑,然后设置为环境变量就OK了

C:\Anaconda3\envs\simp37\Library\bin

2.4、降低问题包的版本后重新打包

编译完成后还是出错,问题:

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问题
python 虚拟环境打包exe方法及路过的坑_第10张图片
于是查看版本:torch版本1.3.1 torchvision版本0.4.2,网上查了对应版本号没啥问题
python 虚拟环境打包exe方法及路过的坑_第11张图片

解决方案:
降低torchvision版本,参考网上:https://blog.csdn.net/jacke121/article/details/104986360
卸载现有版本,按照低版本

pip uninstall torchvision
pip install torchvision==0.2.2.post3

更改后的安装包:
python 虚拟环境打包exe方法及路过的坑_第12张图片

继续打包

pyinstaller -Fc F:\GF\SARshibie\software\run_ship_rotate.spec

编译后的执行程序可以正常执行了。
这个问题困了我一天,终于干掉了,特此记录。

你可能感兴趣的:(深度学习,笔记心得,python,pycharm,pytorch,pyinstaller)