首頁 >後端開發 >Python教學 >如何使用 PyInstaller 的 --onefile 選項正確地捆綁資料檔?

如何使用 PyInstaller 的 --onefile 選項正確地捆綁資料檔?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 18:17:16395瀏覽

How to Bundle Data Files Correctly with PyInstaller's --onefile Option?

使用--onefile 進行PyInstaller 資料捆綁:解決缺少的資源

在使用PyInstaller 建立緊湊的可執行檔(EXE) 的檔案(EXE) 的檔案(EXE)過程中,使用'--onefile'標誌,使用者在捆綁其他資料檔案(例如圖像或圖示)時經常遇到挑戰。當編譯的 EXE 無法找到引用的資源時,就會出現此問題。

Shish 提出的一種特殊解決方案是在腳本中的 run 方法之前設定環境變數:

import os
os.environ["IMAGE_PATH"] = os.path.join(os.path.dirname(os.path.abspath(__file__)), "images")

但是,這種方法可能不適用於較新版本的 PyInstaller。相反,另一個解決方案是利用sys._MEIPASS 變量,它提供PyInstaller 在運行時創建的臨時目錄的路徑:

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)

透過定義這樣的自訂函數,您可以動態檢索資料文件的絕對路徑,無論您是在開發模式下執行腳本還是作為已編譯的EXE 運行腳本。請記住在relative_path參數中指定資源的相對路徑。

以上是如何使用 PyInstaller 的 --onefile 選項正確地捆綁資料檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn