ホームページ > バックエンド開発 > Python チュートリアル > PyInstaller --onefile 実行可能ファイル内のバンドルされたデータ ファイルに適切にアクセスするにはどうすればよいですか?

PyInstaller --onefile 実行可能ファイル内のバンドルされたデータ ファイルに適切にアクセスするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-14 16:39:10
オリジナル
649 人が閲覧しました

How Can I Properly Access Bundled Data Files in a PyInstaller --onefile Executable?

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

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