1.背景

写了个小游戏,打包的时候遇到一些问题,总结下来,以便下次遇到能快速解决

2. 打包操作

切进虚拟工作环境,执行打包命令,这里列举在pycharm以及cmd命令行运行步骤解析;

① cmd

同时键入win+R键 输入cmd后回车

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_python


出现如下窗口

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_python_02

或者在pycharm里的下方terminal窗口处执行相关命令

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pyinstaller_03

选择对应的虚拟环境,可以在pycharm --> 左上角的File --> Settings 如下图指示里指定

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pyinstaller_04

在终端里输入命令,切入项目所在路径

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_配置文件_05


简单介绍一下程序目录

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pygame_06


由于我程序运行环境是在独立的工作空间里,因此这里打包的时候,使用的pyinstaller也是指定虚拟工作空间里的

C:\Users\Hellen\DestroyApple\Scripts\pyinstaller  --distpath D:\install\packages\DestroyApple\dist  squish_bak.py

–distpath 指定打包后文件输出地址

运行后出现如下警告(可以忽略,也可以根据警告去解决,有些问题不大)

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_游戏开发_07

安装pypiwin32

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pypiwin32 如果安装之后还是不行,再试试如下方式

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pygame_08

  1. 下载http://python-distribute.org/distribute_setup.py文件
  2. 然后运行它python distribute_setup.py即可。

如果有UPX不可用的错,可以看下这个博文 解决
继续执行

C:\Users\Hellen\DestroyApple\Scripts\pyinstaller  --distpath D:\install\packages\DestroyApple\dist  squish_bak.py

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_游戏开发_09


打包成功

在dist目录找到 squish_bak.exe双击执行,程序闪退,没有生成日志,解决办法如下:

把squish_bak.exe拖入至cmd窗口,回车运行;

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_配置文件_10


由报错可知,配置文件没有自动打包,所以这里我们收到把配置文件烤贝过来,重新运行

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_配置文件_11


拷贝过来后,重试

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_配置文件_12


报此错,这项目未打包直接在pycharm里面运行是正常的,具体报错代码如下

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pygame_13


Pygame 配备了内建的默认字体。通过传递 “None” 为文件名访问此字体。此处打包后运行报错,找不到这个内置字体,可见是pyinstaller打包没有将此字体拷贝过去,因此,将虚拟环境中的…\Lib\site-packages\pygame\freesansbold.ttf 字体拷贝至上图报错路径下

重新运行程序,报如下错

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_游戏开发_14


也是同一行代码报的错

这里我们切进去看看pygame.font.Font()源码

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pygame_15


pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_游戏开发_16


我这里用的是None,python版本是3.5,查官方文档可以看到

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_python_17


如果文件名是None 那pygame将会加载默认的字体,这里加载字体,没有导入打开文件的包,我在这里没有找到,所以我在文档程序里加了from pathlib import Path 之后重新打包,再运行就成功了。(注意配置文件要重新拷贝)

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_配置文件_18


另外我在pygame的font.pyi里加入 重新打包,还是报同样的错,具体原因还未清楚。

重新看回源码,发现pygame.font.py 有如下俩段代码

pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pyinstaller_19


pyinstaller 打包完成在没有python的环境电脑无法运行 pyinstaller打包报错_pyinstaller_20


可见之前的猜测是对的,打包前导入这个模块即可