Windows下使用pyinstaller打包python3.5程序(从安装开始)

前几天写了一个程序,想给朋友用,但是让他一个从来没编过程的人去装Python还有一堆相关的包,是不现实的,所以想把.py打包成可执行文件。

  • 打包工具:pyinstaller
  • 系统及配置:Windows10 、64位
  • Python3.5

因为pyinstaller最高支持版本只到3.5,所以在台式机上重新安装python和相关包。

安装Python3.5

最好是从官网(下载点我)下载。

我进行的是“自定义安装”, 一是为了自己指定安装目录;二是为了勾选以下几项,最好是在安装时就将其添加到环境变量,这样应该会避免之后的很多麻烦。还有要记得自己的安装目录
Windows下使用pyinstaller打包python3.5程序(从安装开始)_第1张图片

安装必要的包

  1. 安装pygame

    pip install pygame

  2. 安装PyQt5

    pip install pyqt5

安装之后运行原来写好的程序,运行成功,说明所需的包已安装成功。

安装pyinstaller

pip install pyinstaller

提示安装成功后,从cmd窗口,cd 进入想要打包的程序所在的目录。然后进行打包。其中的“-F”是指打包生成一个文件。相关参数选项参见官网说明。

pyinstaller -F pyqt_gui_game.py

虽然最后提示已成功打包,但是可以看到过程中有很多
WARNING

8826 WARNING: lib not found: api-ms-win-crt-heap-l1-1-0.dll dependency of d:\program files\python35\python.exe
8864 WARNING: lib not found: api-ms-win-crt-stdio-l1-1-0.dll dependency of d:\program files\python35\python.exe
8905 WARNING: lib not found: api-ms-win-crt-locale-l1-1-0.dll dependency of d:\program files\python35\python.exe
8943 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of d:\program files\python35\python.exe
8979 WARNING: lib not found: api-ms-win-crt-math-l1-1-0.dll dependency of d:\program files\python35\python.exe
9112 WARNING: lib not found: api-ms-win-crt-runtime-l1-1-0.dll dependency of d:\program files\python35\python35.dll
9150 WARNING: lib not found: api-ms-win-crt-convert-l1-1-0.dll dependency of d:\program files\python35\python35.dll
9190 WARNING: lib not found: api-ms-win-crt-environment-l1-1-0.dll dependency of d:\program files\python35\python35.dll
9231 WARNING: lib not found: api-ms-win-crt-heap-l1-1-0.dll dependency of d:\program files\python35\python35.dll
9267 WARNING: lib not found: api-ms-win-crt-stdio-l1-1-0.dll dependency of d:\program files\python35\python35.dll
9305 WARNING: lib not found: api-ms-win-crt-process-l1-1-0.dll dependency of d:\program files\python35\python35.dll

上面贴出的只是其中一部分,但是可以发现,都是因为缺少名为api-ms-win-crt-………相关的dll文件

心里不免忐忑,于是打开生成的.exe文件,果然运行错误。

由于我笔记本上安装的是Anaconda(python3.6),在Anaconda的目录下有这些dll文件,于是考虑将其copy过来,到台式机的python35安装目录下,即与python35.dll在同一个目录下。虽然只是抱着试一试的态度,但是事实证明是可行的,打包过程很顺利,生成的.exe文件也可以运行。

但是由于程序过程中需要载入图片和音乐等文件,所以即使打包以后,还要将那些文件放到.exe所在的目录下,不然会报错哦,类似下面这种:

pygame.error: Couldn’t open boy.png

pygame.error: Unable to open file ‘pickup.wav’

注意!!!

如果遇到下面的问题:

module = loader.load_module(fullname) ImportError: DLL load failed: 找不到指定的模块。 Failed to execute script pyi_rth_qt5plugins

那是由于路径问题,可以在打包时添加–paths(或-p)选项,如下:

pyinstaller –paths “D:\Program Files\Python35\Lib\site-packages\PyQt5\Qt\bin” –onefile pyqt_gui_game.py

如此,便可以解决。
(其中的–onefile等同于-F,前面给出的官网参考里面有详细说明。)

备注

由于我用的是Anaconda(Python3.6)版本的,pyinstaller可以支持python2.7和python3.3-3.5,详细可以到其官网查看。

于是考虑使用pyinstaller。那么接下来就是转到Python3.5即可,由于我安装的是Anaconda,可以进行多版本Python管理。于是在Anaconda官网上找到相关参考,新建了一个环境,并安装了python3.5,然后在该环境下,安装了前面提到的所必要的包和pyinstaller,然后打包,但是总会出现错误,即使是用上面的方法试着解决,最终还是出现了

Fatal Python error: PyThreadState_Get: no current thread

在网上查相关资料,也无果。最终决定卸载Anaconda,并重新安装了python.org的python3.5,这便有了这篇文章。之所以选择从python官网下载,是由于其他版本说不定在什么时候就会出现一些意料之外的问题。

你可能感兴趣的:(python)