1. ホーム
  2. python

[解決済み] pyInstallerで生成されたPython EXEでアプリケーションのパスを決定する

2023-02-28 15:10:59

質問

私は1つの.pyファイルに存在するアプリケーションを持っています。 pyInstallerがそれをWindows用のEXEにうまくバンドルするようにすることができました。 問題は、そのアプリケーションが、常に同じディレクトリのアプリケーションのすぐそばにある.cfgファイルを必要とすることです。

通常、私は以下のコードを使用してパスを構築します。

import os
config_name = 'myapp.cfg'
config_path = os.path.join(sys.path[0], config_name)

しかし、pyInstallerによって生成されたEXEから呼び出された場合、sys.pathは空白になっているようです。 この同じ挙動は、pythonの対話型コマンドラインを実行してsys.path[0]を取得しようとしたときにも発生します。

現在実行中のアプリケーションのパスを取得し、それに相対するファイルを見つけることができるような、より具体的な方法はありますか?

どのように解決するのですか?

解決策を見つけました。 アプリケーションがスクリプトとして実行されているか、フリーズした exe として実行されているかを確認する必要があります。

import os
import sys

config_name = 'myapp.cfg'

# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(__file__)

config_path = os.path.join(application_path, config_name)