ホームページ > バックエンド開発 > Python チュートリアル > PyInstaller の --onefile オプションを使用してデータ ファイルを正常にバンドルするにはどうすればよいですか?

PyInstaller の --onefile オプションを使用してデータ ファイルを正常にバンドルするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-23 03:24:13
オリジナル
997 人が閲覧しました

How Can I Successfully Bundle Data Files with PyInstaller's --onefile Option?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート