一、文章主要内容

python pyinstaller打包pygame(以飞机大战为例),含有多个py文件和多个资源(image,font,sound),并且py文件中导入了多个其他的类(如:import pygame)。

二、打包方法(打包的时候没有管资源文件,只管py文件)

1、安装打包文件:pyinstaller,在cmd中输入以下命令

pip install pyinstaller

2、到需要打包的py文件目录下,在文件目录框输入cmd,然后回车进入当前路径下的cmd窗口(这个只不过是快速打开这个路径下的cmd窗口,也可以以其他方式进入到py文件的目录下)

3、输入以下命令直接开始打包:
① 第一种情况:#只有一个文件

pyinstaller -F 飞机大战.py

② 第二种情况:#有多个py文件可以直接以空格间隔继续在后面添加

pyinstaller -F 飞机大战.py supply.py myplane.py enemy.py

③ 其他可加命令:-i 程序图标.ico,-w: 不显示python运行窗口,建议最后再添加此命令,测试的时候先不添加,方便查找错误。

pyinstaller -F -i D:\pyinstall\plane\plane.ico -w 飞机大战.py supply.py myplane.py enemy.py

4、执行完第三部之后
① 会在当前目录下生成build和dist文件夹,exe文件在dist文件夹里面,如果有资源文件的话直接放到dist文件夹里(注意文件路径)。
② 放好资源文件,直接双击exe文件就可以运行了。
③ 如果可以正常运行,python项目打包成功了,如果想在其他电脑上运行此程序,可以打包(压缩包)dist整个文件夹。
④ 对③的补充:其实如果pyinstaller打包的exe程序没有资源文件,可以直接复制exe文件在其他电脑运行。

5、常用打包扩展命令
-F :pyinstaller -F demo.py 只在dist中生产一个demo.exe文件。

-D:pyinstaller -D demo.py 默认选项,除了demo.exe外,还会在在dist中生成很多依赖文件

-i:加入图标

-w:表示执行exe文件时去除背后的dos窗口 ps:建议最初试验时保留dos,可以查看是否有错误发生

ps:-w命令有的不能使用
例如:如果这个py文件很简单,里面只有简单的输出语句,需要用到dos窗口,使用-w打包之后会导致程序无法运行。

三、遇到的错误

1、ModuleNotFoundError : No module named 'pygame' 此错误是因为我电脑上没有安装pygame类包,在cmd中安装一下:

pip install pygame

2、Fatal error detected × Failed to execute script x 确定 -w命令有的不能使用
例如:如果这个py文件很简单,里面只有简单的输出语句,需要用到dos窗口,使用-w打包之后会导致程序无法运行。

3、Python打包之后执行exe直接闪退 这个可能是因为py文件本身很简单,里面代码运行之后就直接闪退了。如下一个简单的py文件:

import math
#import os
#import pygame
#from pip._vendor.distlib.compat import raw_input

print("今天是2021-05-24 15:59")
print(max(3,4))
if math:
    print(123)
# os.system("pause")
# raw_input()
#input("输入任意字符结束")

解决办法就是打开最后注释的任意一条语句:

import math
#import os
#import pygame
#from pip._vendor.distlib.compat import raw_input

print("今天是2021-05-24 15:59")
os.system("pause")
raw_input()
print(max(3,4))
if math:
    print(123)
input("输入任意字符结束")

4、AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'erro ① 是因为pyinstaller打包时图片的格式不对 应该为.ico格式
② 在线图片转换链接:png->ico ③ 上面那个链接不只支持png格式转ico,其他的也可以。