python打包程序:使用pyinstaller将pygame的游戏项目转换为exe文件

背景介绍:

临近期末,python课程要求写一个python的程序,找了以下github发现小游戏挺多的,自己比较感兴趣改写了小游戏,写完之后想给别人玩,但是除了计算机专业很少人会安装python的运行环境,于是自己想着如何打包给别人玩。最后打包成功,但是走过很多坑,所以写下本博客。


那么废话不多说我们开始吧。

1.安装pyinstaller

第一步就是安装打包程序pyinstaller
官方网站:https://pyinstaller.readthedocs.io/en/stable/

1.1方法一:使用cmd安装

打开cmd
使用 pip install pyinstaller
如果你比较幸运就会安装成功(但是一般都会出现问题)

1.1.1 问题:升级pip

一般可能会出现下面的情况 “升级pip”
在这里插入图片描述
我们可以根据要求升级
使用:python -m pip install --upgrade pip
如果幸运成功,但又可能出现下面的情况
在这里插入图片描述

那么我们又使用: python -m pip install --user --upgrade pip
最后再进行安装
如果出现下面的情况 那么就是安装成功
在这里插入图片描述
如果确实不行,那么可以使用方法二进行安装,拒绝花里胡哨!
(因为每个电脑不同,出现情况也不同,我自己电脑可以,但是我同学的电脑 没弄出来)

1.2 方法二:使用pycharm直接安装pyinstaller

点击左上角 文件->设置->项目->python解释器->+号 然后直接输入pyinstaller 点击安装软件包即可
(切记安装包时,不要开翻墙的软件)
在这里插入图片描述
当然也可能要升级pip,你可以直接在可视化界面操作,也比较简单。

2.安装UPX

安装pyinstaller我们就可以进行打包了
如果不出意外点击运行会出现下面的问题,这样是不能打包成功的。
在这里插入图片描述
这样我们可以取官网https://upx.github.io/去下载
在这里插入图片描述
这是在github中下载,如果没有翻墙软件会比较慢
在这里插入图片描述
下载然后解压 找到upx.exe文件 然后复制到pyinstaller.exe的目录下即可。

在这里插入图片描述

在这里插入图片描述

2.1问题:如何找到正确的位置

当然如果下载了UPX可能找不到正确的位置。
如何找可能需要自己寻找,因为每台电脑路径都不一样,文件夹可能也不同。
但是如果出现下面的错误也会出错
那就是找到了python3.8里面去了,确定自己的版本(同学电脑会比较多问题,自己的一下就找到了)
在这里插入图片描述

3进行程序打包

在这里插入图片描述

3.1对数据文件打包

首先在源文件的位置打开cmd,当然你也可以在pycharm中打开终端
在这里插入图片描述

然后输入自己的入口文件 进行
在这里插入图片描述
运行就会出现这些目录,其中dist中就会出现打包的exe文件。
main.spec相当于打包的配置文件,我们稍后会进行配置。
在这里插入图片描述
点击打开main.spec
想要看spec的每个参数的情况可以看
https://blog.csdn.net/m0_50028034/article/details/108240698

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['main.py'],
             pathex=[],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

然后将其修改为
在这里插入图片描述

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['main.py','bulletClass.py','enemyTank.py','food.py','game_loader.py','map_loader.py','maps.py','myTank.py','special_effects.py','wall.py'],
             pathex=['E:\TankWar\MyTankWar\src'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )

然后再运行这个spec即可。
在这里插入图片描述
这样就打包完成了,但是还差最后一步 那就是资源的放置。

3.2资源放置问题

3.2.1错误的放置

如果我们是这样的架构,运行文件和图片、音乐等资源文件不在同一个文件夹,那么打包的exe文件相当于main的位置,那么就会出现资源文件要相对放。(因为自己也没了解资源的打包)
在这里插入图片描述
那么就会这样,dist文件中装的是exe文件,但资源文件要放在外面,这样只能将这三个文件夹一起压缩发给好友。
在这里插入图片描述
如果我们是源文件和资源文件放在一个文件夹下,那么我们可以如下面的方式
在这里插入图片描述
然后将下面文件夹压缩发人即可了。
在这里插入图片描述

因为第一次接触,时间仓促也没很了解所有的原理,所以希望对你们有帮助

  • 17
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗吧!骚年!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值