dot-envの目的・機能
「os.getenv()の機能(範囲)を拡張するためにdot-envを使う」
- プロジェクトに配置した「.envファイル」をロード
- ロードした.envの内容を、os.getenv() から取得可能
実際の使い方
- インストール
- .envファイルの用意
- 使い方
- 動作
インストール
pip install python-dotenv
.envファイルの用意
メモ帳などで、プロジェクト内に.envファイルを作成し「KEY=値」を書き込む。
以下のイメージ
KEY="value"
USER_NAME="username"
PASSWORD="password"
ちなみに、ターミナル上で $ echo "KEY=value" >> .env
とすると .envファイルに追記できる。
※誤って 「>>」 でなく 「>」 とすると、記述済み内容をすべて消して最後に送信した "KEY=value" だけが記録されるので注意(>>:append、>:output(上書き)というイメージ)。
使い方
- import は、
from dotenv import load_dotenv
-
load_dotenv(file_path)
で.envの内容を環境変数として認識 -
os.getenv()
メソッドで、.envの内容にアクセス可能
何らかのトークン(TOKEN="asfdhjk...")を.envに記載し、プログラムから取得したい場合。
from pathlib import Path
import os
from dotenv import load_dotenv
env_file = Path(__file__).resolve().parent / ".env"
load_dotenv(path)
token = os.getenv("TOKEN")
動作
私は最初に認識を誤っていたので、記載しておく。
■誤認識■ :load_dotenv()の戻り値からインスタンスを取得して、load_dotenvインスタンスから.env内容を取得する、という操作をするのかと予想していたが、これは誤り。
■正解■:load_dotenv()により、環境変数に.envの内容が登録される → os.getenv()からの呼び出しが可能になる
なお、OS(システム)の環境変数を変更するわけではなく、プロジェクト内で一時的に登録してくれるだけらしい。
グローバルな環境は汚さないので、不安がる必要はない模様(コードを書けば書くほど、システムの環境変数が大量になる、といったことはない)