昨天留給寫文章的時間太少了,所以很多問題的部分都沒說,先來說說安裝PyInstaller遇到的大小寫問題吧,那時想說要輸入了指令python -m pip PyInstaller,結果說找不到這東西,去查了可能原因,說可能我的python版本套件不支援,或是pip版本過舊,結果後來真正的問題被我的好夥伴chatGPT找到了,只是我少打了ns,嗯,以後出錯最好先貼給它幫我看看。
再來就嘗試第一次打包,我用指令:python -m pyinstaller --onefile --windowed main.py(這會找不到),然後出錯了,找不到,然後又找了問題好一段時間最後是不小心執行了沒有python -m在前面的版本才成功,後來找到底原因是甚麼,原來當我在終端裡打下[套件 --version]這樣的指令時,這樣負責去找套件的會是windows,不分大小寫的,但當我想把指令指定在現在的環境執行時,指令長這樣:[python -m 套件 --version],這時去找套件的是python,會仔細看每個大小寫,而我在打指令時沒注意到PyInstaller的P、N是要大寫的,所以就一直找不到了,正確要這樣:python -m PyInstaller --onefile --windowed main.py
這下總算成功包成一個exe了,但還沒完,一執行跳出的是一個錯誤視窗,說找不到我字體的檔案,總之後來找到問題是這樣包沒有把其他資源包進去,所以要在指令加上要包檔案,這樣:python -m PyInstaller --onefile --windowed --add-data "assets;assets" main.py
結果還是找不到,又去找問題,原來是因為相對位置變了,之前也聽說這個問題,簡單來說經過打包後檔案的相對位置都改變了所以之前的讀取檔案的路徑不對,所以找不到。
def resource_path(relative_path):
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
這是gpt給的解法函式用來把我們給的相對路徑修正這樣