背景介紹:
臨近期末,python課程要求寫一個python的程式,找了以下github發現小游戲挺多的,自己比較感興趣改寫了小游戲,寫完之后想給別人玩,但是除了計算機專業很少人會安裝python的運行環境,于是自己想著如何打包給別人玩,最后打包成功,但是走過很多坑,所以寫下本博客,
目錄
- 1.安裝pyinstaller
- 1.1方法一:使用cmd安裝
- 1.1.1 問題:升級pip
- 1.2 方法二:使用pycharm直接安裝pyinstaller
- 2.安裝UPX
- 2.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
如果幸運成功,但又可能出現下面的情況

那么我們又使用: 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檔案,但資源檔案要放在外面,這樣只能將這三個檔案夾一起壓縮發給好友,

如果我們是源檔案和資源檔案放在一個檔案夾下,那么我們可以如下面的方式

然后將下面檔案夾壓縮發人即可了,

因為第一次接觸,時間倉促也沒很了解所有的原理,所以希望對你們有幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/385412.html
標籤:其他
上一篇:猜字母游戲
下一篇:【公告】小心更新投票
