ホームページ >バックエンド開発 >Python チュートリアル >PyInstaller の --onefile オプションを使用してデータ ファイルを正しくバンドルする方法

PyInstaller の --onefile オプションを使用してデータ ファイルを正しくバンドルする方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 18:17:16391ブラウズ

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

--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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。