使用PyInstaller 捆綁資料檔:解決--onefile 問題
PyInstaller 是一個用於從Python 腳本創建獨立可執行檔的強大工具。使用 PyInstaller 的 --onefile 選項來捆綁資料檔案(例如圖像或圖示)時,如果找不到引用的文件,使用者可能會遇到挑戰。
了解 --onefile 功能
--onefile 選項將所有程式檔案、庫和資料合併到一個執行檔中。這對於分發和安全目的可能有益,但需要修改資料檔案的存取方式。
處理資料檔案
最初,規範檔案包含以下程式碼指定資料檔案:
a.datas += [('images/icon.ico', 'D:\[workspace]\App\src\images\icon.ico', 'DATA'), ('images/loaderani.gif','D:\[workspace]\App\src\images\loaderani.gif','DATA')]
但是,使用--onefile,PyInstaller 不再將資料檔案儲存在特定目錄中。相反,它將它們嵌入到可執行檔本身。
解決檔案查找問題
要解決已編譯的EXE 無法找到資料檔案的問題,這是一種已知的解決方法正如Shish 所建議的,涉及使用atexit 模組設定環境變數。然而,較新版本的 PyInstaller 已刪除此功能。
更新的解決方案
對於目前版本的 PyInstaller,解決方案在於透過 sys._MEIPASS 存取資料檔案。以下程式碼片段示範了這種方法:
def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)
透過呼叫 resources_path() 取代規範檔案中的檔案路徑,可以在 --onefile 執行檔中正確定位和使用資料檔案。
以上是如何使用 PyInstaller 的 --onefile 選項成功捆綁資料檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!