Python---pyinstaller打包

星空28發表於2024-06-03

安裝: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))

打包模組問題:

  1. import的模組打包會自動關聯
  2. 透過字串引入的模組,打包時無法自動關聯
    例如透過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