今天用python写了个小软件,想着还没学过如何打包软件,于是就上网学习了一下,最后成功打包了,故来分享一下经验。本文所有的操作都通过命令行完成,便于展示。如果使用pycharm等代码环境也一样,右键进入终端即可。
注:本文仅适用单个.py文件的打包,多文件的以后有空补上。
一、安装Pyinstaller库
Pyinstaller库便是我们这次的主角,它可以将.py文件和你所使用的库打包成一个exe可执行程序。
首先win + R,输入cmd进入命令行,然后输入下面这段代码以安装Pyinstaller。(注意不用进入python)
pip install pyinstaller
二、进入需要打包文件的目录
输入以下指令以进入文件所在目录。这里建议将.py文件提前复制到一个空文件夹里,作为打包后的文件夹,并将图标、使用到的外部库放进去。(如果图标和.py在一个文件夹里,那下面打包的代码中,只用输入xxx.ico即可,没必要把路径输全)。
cd /d "文件所在目录"
三、打包
打包命令如下,做一个简单的解释:
-F 指将所有相关项打包进一个exe程序中;
-w 指的是点击运行exe文件后不显示命令行窗口(写这个参数的话,打开exe的同时会打开一个命令行窗口);
-i 指为exe程序添加一个ico格式的图标。
pyinstaller -F -w -i "ico文件路径" ".py文件路径"
等待一段时间过后,出现successfully后,即代表打包成功。期间可能会报错,一般都是文件路径错误,所以输入命令的时候要特别注意文件路径是否正确。
四、运行
打包之后,会在原先.py文件所在文件夹里生成一些东西,如图所示(openpyxl是外部库,第三步之后会生成这三样东西:build、dist、xxx.spec)。进入dist文件夹就可以看到生成的exe程序了,直接将该exe复制,就可以分享给其他人了。
接下来说一下启动的问题,双击exe启动后,如果遇到闪退(一瞬间跳出一个命令行窗口后又关闭),这一般是没有将外部库导入所导致的问题。
解决方法如下:首先进入命令行,进入该exe程序所在的文件夹,之后直接输入该exe的名称(不带exe后缀),相当于使用命令行运行该程序。此时,就会将你程序运行错误的信息告诉你,如果是出现如下错误,那就是缺少该外部库,去你的python安装文件夹里复制一份到该.py文件所在目录,之后删除build、dist、.spec文件,重新进行打包即可。如出现其他错误信息请自行百度。
ModuleNotFoundError:No module name 'xxx'
五、使用虚拟环境进行打包
上述方法生成的exe文件一般都很大,原因是打包时将很多你程序没用到的库都打包进去了。接下来就介绍一种虚拟环境打包的方法,此种方法只会打包你用到的库,可以大大减少exe的体积。
1. 安装虚拟环境
首先同样是进入命令行,输入以下指令安装虚拟环境。
pip install virtualenv
pip install virtualenvwrapper-win
2. 制作虚拟环境
首先先输入where python查询python路径(如果你安装了多个python版本,记住一个的位置即可,要精确到python.exe文件)。
输入以下指令以制作虚拟环境,环境名称可以自己取。
mkvirtualenv -p="刚刚的python路径" 环境名称
这时会自动进入刚刚你创建的这个虚拟环境,如果你以后还要使用这个虚拟环境的话,可以使用以下代码进入。
workon 环境名称
3. 安装Pyinstaller库
注意,之前提到的方法中安装库的位置是你的电脑里的python,而并不是在这个虚拟环境中,所以要重新安装,代码一样。
pip install pyinstaller
4. 打包
和上面的代码一致,这里就不过多赘述了,在这里再贴一遍。
进入.py文件所在目录。
cd /d "文件所在目录"
打包。
pyinstaller -F -w -i "ico文件路径" ".py文件路径"
你可以将这种方式打包生成的exe的大小和上面那种方法生成的exe的大小进行比较,会发现少了很多。
结语
这里就放上我今天写的这个小软件吧,是个帮助背单词的软件,利用洗牌算法随机从单词表一个个抽取单词,直到结束。
点击添加Excel添加你的单词表,单词的格式如下:第一列:单词;第二列:词性;第三列:词义;
点击随机抽取进入单词显示界面,初始隐藏词义,点击显示词义即可查看单词意思;
点击重置按钮重新进行一次洗牌算法。
下载链接:随机抽取单词软件