上次有說到,GPT給了我一個找位址的函式,但沒有解釋它,所以再來說一下,那個函式:
def resourcepath(relativepath):
if hasattr(sys,"_MEIPASS"):
return os.path.join(sys._MEIPASS,relativepath)
return os.path.join(os.path.abspath("."),relativepath)
它的功能是輸入它在檔案資料夾的相對位置(未打包時),會把它依照現在是已經打包還是未打包狀況,轉換成正確的絕對位置。
hasattr()這個方法是用來看東西有沒有存在的,在這裡是用來看在sys這個套件中有沒有MEIPASS這個東西。
那MEIPASS是在打包的狀況下會出現的東西,在打包的exe被執行時,會把打包的檔案放到一個暫時的資料夾,而這個MEIPASS,就會指向這個資料夾。
然後是os.path.abspath()這個方法,它用來找某個物件的絕對位置,在這裡是找整個資料夾的。
最後是os.path.join()負責把檔案位置接起來,雖然檔案位置是字串,理論上可以用+來合在一起,但是如果直接和可能會遇到系統不同位置寫法不同之類的問題,所以就能用這個函式來接。
整個函式就是如果在sys中有找到_MEIPASS這東西(代表專案已經是打包的狀況了),那就用sys._MEIPASS得到暫時資料夾的位置,和原本的相對位置合在一起得到打包的檔案位置,如果沒有,就直接取得整個資料夾絕對位置和原本的相對位置和一起,得到檔案位置。
另外就是建立了新的專案,但目前沒什麼東西,就是放入while running的迴圈安裝了pygame之類的事。
今天的進度是這樣。