見出し画像

【python3】dotenvを使って環境変数を管理する

結論

$ pip install python-dotenv

「.env」ファイル:

VALUE_NAME = value

python側:

import os
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(verbose=True, dotenv_path=dotenv_path)
# もっと簡単に
from dotenv import load_dotenv

load_dotenv()
# この書き方をする場合、環境変数は「.env」という名前のファイルで、pythonコードと同階層、もしくは親階層に存在していること

取り出すとき:

# 普通の環境変数と同じ
import os
os.environ.get("VALUE_NAME")
# もしくは
os.getenv("VALUE_NAME")

何をしているか

$ pip install python-dotenv

python-dotenvをインストール(あたまにpython-付くのを忘れない)

VALUE_NAME = value

.envファイルにキーと値のペアを書いておく。値の方、""はあってもなくてもいい。

import os
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(verbose=True, dotenv_path=dotenv_path)

osモジュールとdotenvをインポートしておく。

dirname(__file__)で現在のファイルのパスを取得して、os.pathのjoinを使ってファイルパスを結合して、.envファイルのパスを作る。ここで

dotenv_path = f"{dirname(__file__)}/.env"

とかでやってると、Windowsで開発してLinuxサーバーで動かしたりするときに死ぬ。
もちろんサンプルは.envファイルとpythonコードが同じ階層にある前提。
階層が違う時はなんか良い感じにごにょごにょしてくれ。
パスを渡さずにload_dotenv()すると親方向「.env」ファイルをに探しに行ってくれるらしい。
明示的に「探しに行け」って指定したい場合、

load_dotenv(find_dotenv())

verbose=True は、.envファイルが見つからないときにエラーを出す設定。デフォルトはFalseみたい。

環境変数の呼び出しは、普通の環境変数と同じ。

import os
os.environ.get("VALUE_NAME")
# もしくは
os.getenv("VALUE_NAME") # dotenvの公式ドキュメントはこっちで書いてる

os.environ.getとos.getenvは等価。

参考:

Dotenv - python-dotenv

環境変数で設定を管理したくなった場合のpython-dotenvのメモ - podhmo's diary

この記事が気に入ったらサポートをしてみませんか?