# python pyinstaller
[TOC]
## 安裝 pyinstaller
打開命令提示字元(可按 Win + R,輸入 cmd 然後 Enter):
```
pip install pyinstaller
```
## 移動到你的遊戲資料夾
假設你的 Python 程式叫做 game.py,而且 a_million_dreams.mp3 和 a_million_dreams_beats.txt 都在同個資料夾
輸入到終端機:
```
cd C:\Users\你的名字\Desktop\你的遊戲資料夾
```
## 打包成 .exe
輸入以下指令來打包:
```
pyinstaller --onefile --noconsole 你的遊戲檔案名稱.py
```
參數說明:
--onefile:打包成單一 .exe 檔
--noconsole:不要顯示黑色命令視窗(遊戲是用視窗模式)
## 打包指令如下(請在 S_test1 資料夾中執行):
將所有檔案加入EXE檔案當中
在命令提示字元輸入以下指令(這是單行!):
```
pyinstaller --onefile --noconsole --add-data "a_million_dreams.mp3;." --add-data "a_million_dreams_beats.txt;." main.py
```
📌 注意:
* --add-data "檔案路徑;目的資料夾":這樣會把檔案打包進 .exe,並在執行時「解壓」到暫存資料夾中。
* ;.:代表解壓到目前工作資料夾
* 如果你是 Mac 或 Linux,分號 ; 要改成冒號 :+1:
## 適性修改
修改程式碼以適應 PyInstaller 的打包方式:
加入這段程式碼來取得資源檔案的正確路徑(放在 import 區域下面):
```python=
import sys
import os
def resource_path(relative_path):
try:
base_path = sys._MEIPASS # PyInstaller 專用暫存資料夾
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
```
接著修改以下兩行:
```python=
pygame.mixer.music.load(resource_path("a_million_dreams.mp3"))
beats = load_beat_times(resource_path("a_million_dreams_beats.txt"))
```
### 🔆要再進行一次上一步,進行打包
## 打包成功後 .exe 路徑
打包完成後,你會在:
```
S_test1/dist/main.exe
```
這個 main.exe 已經內含音樂與節拍資料,可以獨立執行,不需要再放 .mp3 或 .txt 檔!