Pythonスクリプトをexe化する際には、スクリプトの実行パスを正確に取得することが重要です。通常、Pythonスクリプトでスクリプトの実行パスを取得する場合は、sys
モジュールを使って以下のようにします。
import os
base_path = os.path.dirname(__file__)
ここで__file__
は実行されたスクリプトのフルパスを保持しています。しかし、.py
ではなく、.exe
ファイルを実行する場合には、少し違った実行結果となって問題が発生することがあります。
exe化したアプリケーションを実行すると、まずスクリプトの実体をTemporaryフォルダにコピーした後に、スクリプトを実行する、という動きになります。そのため、実行している場所がexeが置いてあるパスと異なるため、もしexeファイルを配置したファイルを相対パスでファイルなどで操作しようとすると、「Not found」でエラーになってしまいます。
この問題を解決するためには、exeファイルを実行したパスを取りたい場合には、次のように取得を行うことで対処することができます。
import sys
import os
path_current_dir = os.path.dirname(sys.argv[0])
ここでsys.argv[0]
には、実行ファイルまでのフルパスが入っているので__file__
と同じように使うことができます。
以上がPythonスクリプトをexe化する際の絶対パスの取得方法についての説明です。この知識を持っておくことで、exe化するスクリプトについてはあらかじめ知っているとエラーにハマることを回避できるかと思います。