安裝:pip install pyinstaller
注意事項:
1.支援mac、win
2.配合虛擬環境打包。
a.在mac\win系統上開發(為他這個程式建立一個虛擬環境)
b.開發...
c.開發完畢後
pip freeze > reqirements.txt
d.開啟win虛擬機器
e.建立虛擬環境
f.安裝專案依賴
pip install -r reqirements.txt
g.安裝pyinstaller -F xxxxx
產出: xxx.exe
多檔案打包: pyinstaller -D app.py -n app2
單檔案打包: pyinstaller -F app.py
單檔案打包,且對打包後的exe檔案重新命名為app2: pyinstaller -F app.py -n app2
打包路徑問題:
本地檔案路徑獲取,此方式打包不會出錯:
方式一:BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
方式二:
if getattr(sys, 'frozen', False):
BASE_DIR = os.path.dirname(sys.ececutable)
else:
DASE_DIR = os.path.dirname(os.path.abspath(file))
打包模組問題:
- import的模組打包會自動關聯
- 透過字串引入的模組,打包時無法自動關聯
例如透過importlib進入的模組
示例
import importlib
card = importlib.import_module('utils.card')
v1 = card.get_number()
print(v1)
引入的card模組,在打包過程中需要手動匯入
在打包過程中生成的.spec檔案中隱含模組hiddenimports中加入'utils.card',在打包.spec檔案
再打包:pyinstaller -F app.spec