SANANEBLOG
python PR

pyinstallerでexe化したら設定ファイルを読み込めなくなってしまった際のパスの取得方法

記事内に商品プロモーションを含む場合があります

selenium×pythonを使用して作成したブラウザ自動化スクリプトを実行環境に依らずに配布するため、Pyinstallerで実行ファイル(.exe)を作成していざ実行してみましたが、FileNotFoundErrorで実行できませんでした。

今回はそのエラーを解消方法を記載します。

問題

次のような構造で実行ファイルを配置しています。

test
|---test.exe
|---config.yaml

[test.exe]はpyinstallerを使用し以下コマンドで[test.py]をexe化したものになります。

pyinstaller test.py --onefile --noconsole

[test.exe]は[config.yaml]内の設定を参照し、スクリプトを実行する仕組みです。

しかし、[test.exe]を実行すると以下のようなエラーが表示され、スクリプトが起動しません。

FileNotFoundError: [Errno 2] No such file or directory: 'config.yaml'

解決方法

解決方法としては[config.yaml]を読み込む記述を以下のように修正しました。

# 必要なモジュールのインポート
import os
import sys

# exeを実行している作業ディレクトリを読み込みbase_pathに格納
base_path = os.path.dirname(os.path.abspath(sys.argv[0]))
# 作業ディレクトリとconfig.yamlの文字列を結合し絶対パスを取得する
config_file_path = os.path.join(base_path, "config.yaml")
# 絶対パスでconfig.yamlを読み込む
with open(config_file_path, encoding='utf-8') as file:
    config = yaml.safe_load(file.read())

最後に

同様のエラーの解決方法はネット上にいくつか転がっていましたが、それのみでは今回の事象は解決できず今回は自力で解決しました。

少しでも困っている方の助けになれば幸いです。