概要
PyInstallerでPythonスクリプトをexe化すると、ファイルの参照方法が変わるようです。
通常の.pyファイルでは__file__を使って実行中のスクリプトのパスを取得できますが、exe化した場合にはsys.executableで実行ファイルのパスを取得しないと、同じフォルダに置いてあるファイルを参照できなくなるようでした。
対策法
これを防ぐために、以下のコードで自分がPyInstallerで実行されているかどうかを判別する必要がありました。
import os
import sys
def fetch_base_path() -> str:
"""基準パスを取得する関数"""
# PyInstallerで実行されているかどうかをチェック
if getattr(sys, "frozen", False):
# EXEの実行ファイルのパスを取得
return os.path.dirname(sys.executable)
else:
# スクリプトの実行ファイルのパスを取得
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 使用例
# ベースパスを取得
#base_path = fetch_base_path()