iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
自我挑戰組

學習用Pygame製作小專案系列 第 14 篇

Day14 再說說找位址的函式,還有總算開始這階段專案

  • 分享至 

  • xImage
  •  

上次有說到,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之類的事。
今天的進度是這樣。


上一篇
Day13 更多關於我昨天遇到的那些問題
下一篇
Day15 嘗試了多個.py檔和class,腦袋好亂
系列文
學習用Pygame製作小專案 共 21 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言