--onefile を使用した PyInstaller データのバンドル: 不足しているリソースの対処
「--onefile」フラグを使用すると、ユーザーは画像やファイルなどの追加データ ファイルをバンドルする際に課題に遭遇することがよくありますアイコン。この問題は、コンパイルされた EXE が参照リソースの場所を特定できない場合に発生します。
Shish が提案した特定の解決策の 1 つは、スクリプトの run メソッドの前に環境変数を設定することでした。
import os os.environ["IMAGE_PATH"] = os.path.join(os.path.dirname(os.path.abspath(__file__)), "images")
ただし、このアプローチは 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)
次のようなカスタム関数を定義することで、スクリプトを開発モードで実行しているか、コンパイルされた EXE として実行しているかに関係なく、データ ファイルへの絶対パス。 relative_path パラメーター内でリソースへの相対パスを忘れずに指定してください。
以上がPyInstaller の --onefile オプションを使用してデータ ファイルを正しくバンドルする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。