python-dotenv モジュールの概要
python-dotenv モジュールを使用すると、Python プログラム実行時に次のような .env
ファイルを読み込んで、環境変数を設定することができます。
上記の例のように、${HOME}
という形で環境変数の値を展開することもできます。
特定のプログラムを実行するために、いちいち OS の環境変数を設定するのを嫌がるユーザーはたくさんいます。
あなたのプログラムが何らかの環境変数を必要としているのであれば、.env
ファイルによる設定手段も提供しておくと親切です。
.env
の仕組みは Python に限ったものではなく、いろいろな言語で採用されています。
python-dotenv モジュールのインストール
python-dotenv
モジュールは pip
コマンドでインストールできます。
$ python3 -m pip install python-dotenv
システム全体の Python 実行環境を汚したくない場合は、次のように venv 仮想環境を作成 して、そこにインストールしましょう。
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install python-dotenv
仮想環境は次のように抜けられます。
(venv) $ deactivate
python-dotenv の使い方
.env ファイルの内容を環境変数に反映する
.env
ファイルを読み込むのはとても簡単で、load_dotenv()
を呼び出すだけです。
次の Python スクリプトでは、同じディレクトリ(あるいは、より上位のディレクトリ)に置かれた .env
ファイルの内容を読み込み、環境変数に反映しています。
基本的な使い方としては、これだけで OK です。
仮に、.env
ファイルが存在しなくても、load_dotenv()
はエラーにならないので、上記のようなコードは安心して実行することができます。
OS の環境変数を上書きする (override)
OS の環境変数設定で、すでに同じ名前の変数が定義されている場合は、そちらが優先して使われるようになっています。
.env
ファイルで設定した値を優先して使いたい場合は、次のように override
オプションを指定します。
from dotenv import load_dotenv
load_dotenv(override=True)
(おまけ)config モジュール化する
次の config.py
は、アプリケーション全体のコンフィグ情報を管理するモジュールの実装例です。
この config
モジュールを使えば、アプリケーションのどこからでも次のようにコンフィグ情報を参照できるようになります。
.env ファイルの扱い方
.env ファイルはどこに置くべきか?
ある Python スクリプトから dotenv.load_dotenv()
関数を呼び出すと、そのスクリプトファイルがあるディレクトリを起点に、.env
ファイルが見つかるまで親ディレクトリを遡りながら検索します。
なので、あるプロジェクトで使用する .env
ファイルは、そのプロジェクトのルートディレクトリに配置 しておけば、まずロードに失敗することはありません。
.env ファイルは Git にコミットする?
.env
ファイルは、ユーザー固有の設定を記述するものです。
例えば、Web サービスのアクセストークンなどを記述するので、 .env
ファイルは Git にコミットしてはいけません。
間違えてコミットしないように、.gitignore
ファイルに .env
のエントリを登録しておきましょう。
Git にコミットしない .env
ファイルであることを明確にするために、.env.local
というファイル名を使うこともあります。