背景介绍:
临近期末,python课程要求写一个python的程序,找了以下github发现小游戏挺多的,自己比较感兴趣改写了小游戏,写完之后想给别人玩,但是除了计算机专业很少人会安装python的运行环境,于是自己想着如何打包给别人玩。最后打包成功,但是走过很多坑,所以写下本博客。
目录
1.安装pyinstaller1.1方法一:使用cmd安装1.1.1 问题:升级pip
1.2 方法二:使用pycharm直接安装pyinstaller
2.安装UPX2.1问题:如何找到正确的位置
3进行程序打包3.1对数据文件打包3.2资源放置问题3.2.1错误的放置
那么废话不多说我们开始吧。
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 如果幸运成功,但又可能出现下面的情况 ![在这里插入图片描述](https://img-blog.csdnimg.cn/6540e457c83247a39f31e80e92a15769.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_20,color_FFFFFF,t_70,g_se,x_16)
那么我们又使用: 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的目录下即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ae83b6ad6d7643fbbf77dc344479b50f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5bb73c6c9ff24daaa8587901baceb757.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_16,color_FFFFFF,t_70,g_se,x_16)
2.1问题:如何找到正确的位置
当然如果下载了UPX可能找不到正确的位置。 如何找可能需要自己寻找,因为每台电脑路径都不一样,文件夹可能也不同。 但是如果出现下面的错误也会出错 那就是找到了python3.8里面去了,确定自己的版本(同学电脑会比较多问题,自己的一下就找到了) ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4cea9ebd81d47829086f4ce527f5814.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_20,color_FFFFFF,t_70,g_se,x_16)
3进行程序打包
![在这里插入图片描述](https://img-blog.csdnimg.cn/3fbc6d1a49f441cc8f5317a7f99ab15d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_9,color_FFFFFF,t_70,g_se,x_16)
3.1对数据文件打包
首先在源文件的位置打开cmd,当然你也可以在pycharm中打开终端 ![在这里插入图片描述](https://img-blog.csdnimg.cn/18bf5d8c6a76438a9bb4954927e0ce6e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aWL5paX5ZCn77yB6aqa5bm077yB,size_20,color_FFFFFF,t_70,g_se,x_16)
然后输入自己的入口文件 进行 运行就会出现这些目录,其中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 )
然后将其修改为 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f337683a8b41422d8a49ca450932521d.png)
# -*- 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文件,但资源文件要放在外面,这样只能将这三个文件夹一起压缩发给好友。 如果我们是源文件和资源文件放在一个文件夹下,那么我们可以如下面的方式 然后将下面文件夹压缩发人即可了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e8add3cd13af4b5daa39252912ba7783.png)
因为第一次接触,时间仓促也没很了解所有的原理,所以希望对你们有帮助
|