PyInstaller によるデータ ファイルのバンドル (--onefile)
単一の実行可能ファイル内でのデータ ファイルのバンドル (--onefile)アプリケーション展開のための実用的なソリューション。ただし、このオプションを使用すると問題が発生してイライラする可能性があります。このガイドでは、画像やアイコンなどの外部ファイルが .spec ファイルに含まれているにもかかわらず適切に読み込めないという一般的な問題に対処します。
問題の概要
質問者は、--onefile オプションを使用して、画像とアイコンを PyInstaller 実行可能ファイルにバンドルできませんでした。アプリケーションは --onedir を使用すると正しく動作しましたが、--onefile を使用すると外部ファイルが見つからなくなりました。実行可能ファイルの実行中に作成された一時ディレクトリにファイルが存在していたにもかかわらず、この問題は解決しませんでした。
解決策
古いバージョンの PyInstaller では、環境変数が次のように設定されていました。バンドルされたファイルの場所を指します。ただし、新しいバージョンでは、この動作が変更されました。代わりに、パスは sys._MEIPASS として設定されるようになりました。
この問題を解決するには、sys._MEIPASS を使用してバンドル ファイルにアクセスするようにコードを更新します。
import sys 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)
これを使用して、更新されたこのアプローチを使用すると、 --onefile オプションを使用している場合でも、PyInstaller 実行可能ファイル内のバンドル ファイルに確実にアクセスできます。
以上がPyInstaller --onefile 実行可能ファイル内のバンドルされたデータ ファイルに適切にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。