由于最近的工作的需要,现在特意记录一下。这个部分也是折腾了我一点时间,在网络上也是找寻各种问题的解决方案,话不多说,直接上干货。
由于想要打包的是含有各种模块的python文件,所以在这里在anaconda中先创建一个虚拟的环境。
1. 打开Anaconda Prompt,输入conda create -n your_env_name python=X.X
我自己的这里是输入conda create -n classification python=3.7
然后,激活这个环境,在创建好之后会有这部分的提示,复制粘贴+回车即可。
conda activate classification
2. 将需要打包的项目复制在这个文件夹中,路径在安装的Anaconda中的envs中。
3. 配置运行的环境,现在环境中只有python的一些基本模块,所以需要先运行一下。
这个时候就会各种提示,没有各种各样的module。
这个时候既可以选择离线安装,也可以选择在线安装。
我这里是选择离线安装
torch、torchvision在https://download.pytorch.org/whl/torch_stable.html
我自己这里下载的是cpu版本,cuda版本还没搞明白,明白了的话,再更新。
根据自身的需要,下载相应的版本。pip离线安装即可
这里需要注意的是,不同的版本也会出现各种各样的问题。
接下来,还会缺少其他的模块。
在PyPI · The Python Package Index里面搜索相应的版本下载并离线安装即可。
直到可以在虚拟环境中可以运行需要打包的文件。
## $$ && 多几个符号引起注意,原本的训练模型需要用到gpu训练,所以所有的tensor都是cuda。在这里,我就一个一个更换过来,改成了cpu的。
4. 然后,就可以安装pyinstaller. 离线也可,在线也行。文件都是比较小的,速度会很快。
5. 接下来就要开始惊心动魄的打包环节,cd 到需要打包的文件夹中,输入
pyinstaller -F eval.py 回车就行
在这里,因为我要运行的程序是eval.py,你们自己的就换成自己文件的名字就好。
这里,我们可以发现,项目里多了三个文件
dist文件夹、build文件夹、eval.spec文件(这里是相对于我来说的)
6. 接下来,在cmd窗口中拖入dist里面的exe文件,敲回车键。
同时双击也可,但是窗口会一闪而过。然后,幺蛾子就出现了。
(i) ImportError: numpy.core.multiarray failed to import
这个问题网络上有好多解决方案,我自己好用就是
在出现问题的py文件中输入以下代码
import numpy
import numpy.core._dtype_ctypes
(ii) 这个错误我比较抓狂,网上搜了各种方法,都不行。
后来一个一个文件看,发现问题出在models\vision\detection\_utils.py的第74行
@torch.jit.script,这个部分我注释掉了。然后exe文件就可以成功运行了。
我打包了两个不同的python文件,都是需要将文件中的@torch.jit.script
# @torch.jit.script
7. 最后,里面如果出现了各种错误的话。有一定概率是module的版本不对。
我这里遇到的就是pyinstaller和opencv-python的版本不对的情况。