PyInstaller によるデータ ファイルのバンドル: --onefile の問題の解決
PyInstaller は、Python スクリプトからスタンドアロンの実行可能ファイルを作成するための強力なツールです。 PyInstaller の --onefile オプションを使用して画像やアイコンなどのデータ ファイルをバンドルする場合、参照ファイルが見つからないと問題が発生する可能性があります。
--onefile 機能について
--onefile オプションは、すべてのプログラム ファイル、ライブラリ、データを 1 つの実行可能ファイルに結合します。これは配布とセキュリティの目的で有益ですが、データ ファイルへのアクセス方法を変更する必要があります。
データ ファイルの処理
最初、仕様ファイルには次のコードが含まれています。データ ファイルを指定するには:
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)
仕様ファイル内のファイル パスを resource_path() の呼び出しに置き換えることにより、データ ファイルを --onefile 実行可能ファイル内で正しく見つけて使用できます。
以上がPyInstaller の --onefile オプションを使用してデータ ファイルを正常にバンドルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。