94

単一の .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] をフェッチしようとすると発生します。

現在実行中のアプリケーションのパスを取得して、それに関連するファイルを見つけるためのより具体的な方法はありますか?

4

7 に答える 7

147

解決策を見つけました。アプリケーションがスクリプトとして実行されているか、凍結された 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)
于 2009-01-01T08:53:20.173 に答える
4
os.path.dirname(sys.argv[0])

それは私にとってはうまくいきます。

于 2013-01-17T05:31:57.197 に答える