利用pyinstaller将python程序打包成.exe

最近在windows平台用pyqt5编写了一个图形界面,需要打包成可执行的.exe文件。尝试了许多方法失败之后,我选择了使用pyinstaller进行打包。我的环境是win7 64位+python3.6,亲测可用(pyinstall官方文档写着不支持python3.6的)。试了pyinstall官网的版本,发现无法使用,我用的是github中的https://github.com/pyinstaller/pyinstaller

步骤1:

从https://github.com/pyinstaller/pyinstaller下载最新的pyinstall-develop包,并解压。

步骤2:

将需要打包的文件全部放在解压出来的pyinstall_develop文件夹下。如果要打包的源代码存放在多个文件夹中,则保证文件目录级别,将文件夹也拷贝过来就好了。

步骤3:

cd到pyinstall-develop文件夹下,采用命令 python pyinstaller.py -F yourfile.py即可在yourfile文件夹下找到dist/yourfile.exe

正常情况下(运气好的话),pyinstall封装到这里就结束了,双击exe即可运行。但是一般都会遇上几个bug导致.exe闪退或打不开。我也踩了好久的坑才封装成功。我们可以看看终端的输出信息来定位bug。在.exe同级目录下,写一个批处理文件,run.bat。里面的内容如下。

运行该批处理文件,就能显示出bug信息。一般的错误信息都是module找不到的问题,会报出"no module named ......"这样的错误。这时,要检查几样东西。

第一,是否将工程中所有需要的文件都拷贝到pyinstall_develop文件夹下了。

第二,pyinstall是不能看到二级的import的。如果有二级的import,则需要用以下命令。

python pyinstaller.py -F --hiddenimport modulename yourfile.py

我的.exe运行后报错no module named tensorflow.contrib利用一下命令

python pyinstaller.py -F --hiddenimport tensorflow.contrib myfile.py 解决

可参考 https://stackoverflow.com/questions/25733467/pyinstaller-no-module-named

其中modulename就是报错中没有找到的module名称。

当一切bug调瞬后,可以加上-w命令,这样运行时终端就不会弹出。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注