1.背景
写了个小游戏,打包的时候遇到一些问题,总结下来,以便下次遇到能快速解决
2. 打包操作
切进虚拟工作环境,执行打包命令,这里列举在pycharm以及cmd命令行运行步骤解析;
① cmd
同时键入win+R键 输入cmd后回车
出现如下窗口
或者在pycharm里的下方terminal窗口处执行相关命令
选择对应的虚拟环境,可以在pycharm --> 左上角的File --> Settings 如下图指示里指定
在终端里输入命令,切入项目所在路径
简单介绍一下程序目录
由于我程序运行环境是在独立的工作空间里,因此这里打包的时候,使用的pyinstaller也是指定虚拟工作空间里的
C:\Users\Hellen\DestroyApple\Scripts\pyinstaller --distpath D:\install\packages\DestroyApple\dist squish_bak.py
–distpath 指定打包后文件输出地址
运行后出现如下警告(可以忽略,也可以根据警告去解决,有些问题不大)
安装pypiwin32
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pypiwin32
如果安装之后还是不行,再试试如下方式
- 下载http://python-distribute.org/distribute_setup.py文件
- 然后运行它python distribute_setup.py即可。
如果有UPX不可用的错,可以看下这个博文 解决
继续执行
C:\Users\Hellen\DestroyApple\Scripts\pyinstaller --distpath D:\install\packages\DestroyApple\dist squish_bak.py
打包成功
在dist目录找到 squish_bak.exe双击执行,程序闪退,没有生成日志,解决办法如下:
把squish_bak.exe拖入至cmd窗口,回车运行;
由报错可知,配置文件没有自动打包,所以这里我们收到把配置文件烤贝过来,重新运行
拷贝过来后,重试
报此错,这项目未打包直接在pycharm里面运行是正常的,具体报错代码如下
Pygame 配备了内建的默认字体。通过传递 “None” 为文件名访问此字体。此处打包后运行报错,找不到这个内置字体,可见是pyinstaller打包没有将此字体拷贝过去,因此,将虚拟环境中的…\Lib\site-packages\pygame\freesansbold.ttf 字体拷贝至上图报错路径下
重新运行程序,报如下错
也是同一行代码报的错
这里我们切进去看看pygame.font.Font()源码
我这里用的是None,python版本是3.5,查官方文档可以看到
如果文件名是None 那pygame将会加载默认的字体,这里加载字体,没有导入打开文件的包,我在这里没有找到,所以我在文档程序里加了from pathlib import Path
之后重新打包,再运行就成功了。(注意配置文件要重新拷贝)
另外我在pygame的font.pyi里加入 重新打包,还是报同样的错,具体原因还未清楚。
续
重新看回源码,发现pygame.font.py 有如下俩段代码
可见之前的猜测是对的,打包前导入这个模块即可