用Pyinstaller打包程序三天的经验
用pyinstaller打包程序,三天的问题,经验,总结,别问,跟着做就完事了。
一、创建新环境
首先,创建一个新的环境。
1.因为如果原来的环境有Anaconda啥的,他会很多绑定的不需要的库也打包进去,导 致最终打包出来的文件很大。
2.说一下 我的python是3.6版本,torch是1.2.0
3.这里我们用pipenv来管理这个环境,很干净,下面跟我做
// 进入程序所在目录
(base) C:\Users\>d:
(base) D:\>cd D:\Study\dabao
用 pip install安装pipenv
这里说一下我们所有的pip install都用源,这样能让我们的安装速度有质的飞升
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple 包名
//举个例子
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple pillow
安装好pipenv以后,我们创建新的虚拟环境
pipenv --python 3.6 //根据自己的python版本选择
进入环境
pipenv shell
进入环境之后我们输入
pip list
列出环境里的库,可以发现非常干净
二、安装程序需要的包
Tip1:
我们在写程序用到一个包时,比如说我要用到
shutil.rmtree()
因此我需要导入包
import shutil
这样就会导致我们在打包的时候会打包整个shutil导致文件变大,这时候我们可以
from shutil import rmtree
然后将程序前的shutil去掉,直接用
rmtree()
这样也可以减小最后生成包的大小
Tip2:
我们在训练时用的应该是torch-gpu版本,打包时我们将下载torch-cpu版本,原因是gpu版本的torch打包后的大小可能是cpu版本的数倍之多,而且很多用户电脑中可能并没有gpu。
这里提供torch cpu的下载方式:复制即可
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple torch==1.2.0+cpu torchvision==0.4.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
我们还需要将程序中的device改为cpu:
torch.device(“cpu”)
在torch.load中还需要加上map_location=‘cpu’,即将原来的
torch.load(‘net’)
改为
torch.load(‘net’,map_location=‘cpu’)
安装好需要的库以及torch-cpu后,跟我做
pip uninstall torchvision
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple torchvision==0.2.2.post3
注意==的前后没有空格
为什么下了个低版本的torchvision呢,我也不知道但我给你们实践了,查阅了其他仁兄的解决方法。如若不这么做,打包后我们打开生成的EXE后大概率会出现如下错误:
failed to execute scripts xxxx
然后这EXE咱就白整了,跟着做就完了
三、用pyinstaller或者auto-py-to-exe打包!
1.pyinstaller
首先安装pyinstaller
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple pyinstaller
然后cd到程序所在目录,-c是运行时打开控制台,我们可以先看看exe运行时会出现什么错误,-D是最后生成两个文件夹dist和build,exe就放在dist里。建议最后最终版在将-c改成-w隐藏控制台。
这里说一下 -D 生成2个文件夹和 -F 生成单个exe文件的 差别:
-F :生成单个exe文件,文件大小比-D小,但是打开以及运行贼慢,而且还经常有些小错误
-D:生成文件夹,文件大小较-D大,但是打开以及运行贼快。
这里推荐先用 -c -D 调试BUG以及一些问题
pyinstaller -c -D xxx.py
再用 -w -D
pyinstaller -w -D xxx.py
当然这里再提一嘴,其实如果只是调试bug的话不管有没有隐藏控制台都无所谓,咱直接打开命令台,然后cd到程序的目录,然后在这里打开xxx.py,这不就有命令台了吗,不就能调试错误了吗。
打包好之后的exe在dist文件夹里,如果咱们的网络有训练好的模型参数,直接复制了放到dist文件夹里就行,到时候要运行exe时可以创建一个快捷方式到桌面上,美滋滋。
2.auto-py-to-exe
首先安装auto-py-to-exe
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple auto-py-to-exe
安装好后直接在命令行输入
auto-py-to-exe
就会跳出来一个网页
这些中文如果看了上面的pyinstall就知道要怎么操作了,我们先浏览py文件路径,然后选单目录,基不基于控制台无所谓,隐藏窗口的话到时候运行exe的时候到cmd命令行里运行便是,一样有控制台,然后附加文件里将训练好的网络模型啥的导入,(单文件我导入模型时总是有问题,尚未解决,便都用单目录模式)在设置里将生成的文件夹位置改一下,点转换就OK了。
四、一些问题,BUG
这个博主写了很多
链接: https://blog.csdn.net/Nirvana_6174/article/details/83961746.
其中我就遇到了这个
按着他的改好了。
还有很多问题我想不起来了,反正直接百度就完事了,总有解决办法。