概要
自分がよく使う Python のConfigParser
を使用して設定ファイルを読み込むための基本的なクラスの実装を共有します。
設定ファイルは .ini
ファイルで、指定されたパスから読み込めます。
自分の過去記事ですが、それらを応用しています。
前提条件
ディレクトリ構造
以下のディレクトリ構造を想定しています。
main.py
とconfig
フォルダを同じフォルダに配置しています。
MyProject/
├── myproject/
│ ├── config/
│ │ └─── settings.ini
│ ├── main.py
│ └── core/
│ ├── __init__.py
│ └─── config_loader.py
設定ファイルの例 (settings.ini)
[DEFAULT]
setting1 = value1
setting2 = value2
[section1]
key1 = value1
key2 = value2
Python コード
main.py
import os
import sys
# フォルダの親ディレクトリをパスに追加する
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from myproject.core.config_loader import ConfigLoader
# ConfigLoaderのインスタンスを作成
loader = ConfigLoader()
# 読み込んだ設定を格納する
settings = loader.settings
# 設定を利用する例
# DEFAULTセクションのsetting1の値を表示
print("Setting 1:", settings["DEFAULT"]["setting1"])
core/config_loader.py
import os
import sys
from configparser import ConfigParser
class ConfigLoader:
"""
設定ファイルを読み込むためのクラス。
インスタンス化時にconfig_pathで指定した設定ファイルをロードする。
デフォルトの設定ファイルは "config/settings.ini"。
"""
def __init__(self, config_path: str = "config/settings.ini"):
# 実行環境に基づく基準パスを取得する
self.base_path = self.fetch_base_path()
# 設定ファイルを読み込み、設定情報を保持する
self.settings = self.load_settings(config_path)
def fetch_base_path(self) -> str:
"""実行環境に応じた基準パスを取得する"""
# アプリケーションがfrozen状態(PyInstallerなどでパッケージ化)かどうかを判定
if getattr(sys, "frozen", False):
# パッケージ化されている場合は実行ファイルのディレクトリを返す
return os.path.dirname(sys.executable)
else:
# パッケージ化されていない場合は、スクリプトの親ディレクトリを返す
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
def load_settings(self, config_path: str) -> ConfigParser:
"""設定ファイルを読み込み、ConfigParserオブジェクトを返す"""
# 設定ファイルのフルパスを作成
full_config_path = os.path.join(self.base_path, config_path)
# 設定ファイルが存在するか確認
if os.path.exists(full_config_path):
# 設定ファイルを読み込み、ConfigParserオブジェクトを返す
parser = ConfigParser()
parser.read(full_config_path, encoding="utf-8")
return parser
else:
# 設定ファイルが存在しない場合、FileNotFoundErrorをスローする
raise FileNotFoundError(f"設定ファイルが見つかりませんでした: {config_path}")
使用方法
-
settings.ini
を作成し、必要な設定を記述します -
main.py
を実行し、ConfigLoader
をインスタンス化します -
settings
変数を通じて設定値にアクセスできるようになります- 例:
settings["DEFAULT"]["setting1"]
のようにアクセスできます
- 例:
注意点
- 設定ファイルのパスが正しいことを確認してください。デフォルトでは
config/settings.ini
が指定されています - 設定ファイルの形式は
.ini
ファイルである必要があります - 設定ファイルが存在しない場合、
FileNotFoundError
が発生します。状況によって適切なエラーハンドリングを行ってください