0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Python].envの環境変数取り出すのに毎回loadenvするの面倒だよね。って話

Last updated at Posted at 2025-03-24

余談

社会人デビューから早1年、、何を学んだかな、、うーむ。
新入社員の子たちにすぐ追い越されそうで怯える毎日ですが(盛った)、そろそろコードにまつわる記事とかTipsを投稿したいなと思い、この記事を書いた次第です。

きっかけ 

個人開発で.envに格納された環境変数を取り出すだけでも、いちいちdotenvモジュールimportしてこうやって、、って調べながら実装すると非常に面倒だなと感じました。
なので、たった数行のコードですが簡単に.envを操作するための関数を実装したので紹介させてください!

本題

今回の実装は環境変数のロードセットの2パターンで実装しました。

同階層のモジュールからの呼び出し

同階層に.envと以下に示すenv.pyを配置し、さらにenv.pyを実行するmoduleAモジュールも同階層であるパターン。

.
├── moduleA.py
├── env.py
└── .env
env.py
import os
import dotenv


def load_env(env_param_key: str) -> str:
    """Function to make getting a env param from .env file easier.
    Args:
        env_param_key (str): env param key name what you want to get.
    Returns:
        env_param_body (str): body of env param.
    """
    dotenv_path = os.path.join(os.path.dirname(__file__), ".env")
    dotenv.load_dotenv(dotenv_path)
    env_param_body = os.environ.get(env_param_key)
    return env_param_body


def set_env(env_param_key: str, env_param_body: str) -> None:
    """Function to make adding env param to .env file easier.
    Args:
        env_param_key (str): env param data what you want to set.
        env_param_body (str): env param data what you want to set.
    """
    f = dotenv.find_dotenv()
    dotenv.set_key(f, env_param_key, env_param_body)
moduleA.py(env.pyを呼び出す)
import env


def main():
    # 環境変数のセット
    env.set_env("IAM", "IRONMAN")

    # 環境変数のロード
    result = env.load_env("IAM")
    print(result)


if __name__ == "__main__":
    main()
$ python moduleA.py
>> IRONMAN

ネストしたモジュールからの呼び出し

設計によっては以下のようにネストしたモジュールから使用したい場合もあるかと思います。

.
├── env.py
├── .env
└── dirA
   └── dirB
       └── moduleB.py

その場合は呼び出し元で少し工夫をしてあげる必要があります。具体的にはsys.pathにパスを追加する必要があります。

moduleB.py(env.pyを呼び出す)
import sys
sys.path.append("env.pyが存在するディレクトリの絶対パス")

import env


def main():
    # 環境変数のセット
    env.set_env("IAM", "BLACKPANTHER")

    # 環境変数のロード
    result = env.load_env("IAM")
    print(result)


if __name__ == "__main__":
    main()

$ python moduleB.py
>> BLACKPANTHER

まとめ

初めてコードにまつわる投稿をしたので緊張しますが、すこしでも勉強になった or 使えるかもとおもっていただけたら幸いです。ご指摘もいただけると幸いです!ここまで読んでいただき、ありがとうございました!!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?