Python で Env ファイルから環境変数を読み取る
環境ファイルには、複数のパスからパッケージと対話する必要がないように、プログラムが必要とするすべての依存関係が格納されます。
この記事では、Python で .env
ファイルを読み取る方法と、ローカル環境ファイルから Python で環境変数をインポートする方法に焦点を当てます。
ローカル環境ファイルから環境変数を読み取る
最新のプログラムのほとんどは、Docker を使用して環境内でプログラムを実行します。 Docker は、効率的なメモリ管理を備えた代替仮想マシンのようなものです。
ただし、テスト中は、プログラムを docker コンテナーから削除し、ローカル環境ファイルを使用してローカルでテストする必要があります。
この記事では、Python でローカル環境ファイルをセットアップし、.env
ファイルをインポートして読み取る方法について説明します。
Python スクリプト用の環境ファイルを作成する
環境ファイルは、テキスト ファイル内のプログラムのキーと値のペアを提供し、それを .env
拡張子で保存することによって作成されます。
次の手順に従って、.env
ファイルを作成します。
-
メモ帳を開き、環境変数を書き込みます。 例えば、
MY_ENV_VAR="This is my env var content."
-
このファイルを名前の後に
.env
拡張子を付けて保存します (例:config.env
)。 これにより、.env
ファイルが作成されます。 -
Python で
env
ファイルを読み取るために、.env
ファイルが配置されているのと同じディレクトリに Python スクリプトを作成する必要があります。
環境変数を読み取る Python スクリプトを作成する
このプログラムは、python-dotenv
ライブラリを使用して、ローカル環境ファイルから Python の .env
ファイルを読み取ります。 インストールするには、コマンド プロンプトまたは PowerShell を開き、次のコマンドを記述します。
pip install python-dotenv
python-dotenv
がインストールされたら、先に進んでスクリプトをロードし、Python で env
ファイルを読み取ることができます。 このプログラムは、python-dotenv
と os
の 2つのライブラリ パッケージを使用します。
環境変数は、ライブラリ関数 load_dotenv()
を使用してコードにロードされます。 関数 load_dotenv()
は、.env
ファイルから環境変数を抽出するために使用されます。
もう 1つのライブラリ関数は dotenv_values
です。これは、環境変数と対話せず、解析された値を含む .env
ファイルから dict
を返すことを除いて、前のものと似ています。
以下は Python プログラムです。
import os
from dotenv import load_dotenv
load_dotenv()
MY_ENV_VAR = os.getenv("MY_ENV_VAR")
コードの最後の行は、os.getenv
関数を使用して .env
ファイルから変数 MY_ENV_VAR
の値をインポートし、同様の名前の変数を使用して Python プログラム内に保存します。
変数 MY_ENV_VAR
を印刷すると、.env
ファイルの内容が表示されます。
This is my env var content.
Bash スクリプトを実行して環境変数を読み取る
これは、プログラムが Python で .env
ファイルを読み取れず、load_dotenv
ライブラリ関数が環境変数の代わりに none
を返す場合の問題も解決した 2 番目の方法です。 これは、.env
ファイルがソース化されていないために発生します。つまり、Python プログラムは .env
ファイルを読み取ることができず、データ変数のロードに失敗します。
シェル スクリプトを実行するシステムでは、環境ファイルの読み込みと Python スクリプトの実行を一緒にラップできます。 これにより、仮想環境 に .env
ファイルをロードし、その環境内で Python スクリプトを実行できます。
このセクションでは、環境変数をロードしてシェル スクリプトにラップし、Python で .env
ファイルを読み取る方法を示します。
.env
ファイルを作成する
このプロセスは前のセクションのプロセスと似ていますが、メモ帳などの一般的なワード エディターを使用する代わりに、EOL 変換を提供するテキスト エディターが必要です。
EOL 変換は、テキスト ファイルの行末を変換します。 そのようなファイルを作成するには、次のことが必要です。
-
Notepad++ または行末変換を提供するその他のテキスト エディターをダウンロードしてインストールします。
-
次のようないくつかの環境変数を記述します。
TYPE=prod PORT=5000
-
編集 > EOL
変換に移動し、Unix(LF) を選択します。 -
config.env
のように、.env
拡張子を付けてファイルを保存します。
これにより、シェル スクリプトが読み取れる環境ファイルが作成されます。 では、Python コードを書いてみましょう。
Python で .env
ファイルを読み取ることができる Python スクリプトを作成する
このプログラムは、外部の Python ライブラリを必要とせずに、Python で .env
ファイルをインポートして読み取ります。 このプログラムは、ライブラリ パッケージ os
をインポートし、ライブラリ関数 os.environ
を使用して変数から値を抽出します。
次に、抽出された値が出力されます。
import os
print(os.environ.get("TYPE"))
print(os.environ.get("PORT"))
ただし、このスクリプトは Python で .env
ファイルを個別に読み取ることはできません。 スクリプトを実行すると None
が返されます。
Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ python test.py
None
None
これは、同じディレクトリ内にあるにもかかわらず、Python スクリプトが環境ファイルにアクセスできないために発生します。 これが、.env
ファイルのソースと Python スクリプトを同時に実行するシェル スクリプトが使用される理由です。
.env
ファイルを Python スクリプトにロードするシェル スクリプトを作成する
このプロセスは、Bash コマンドが Unix EOL 変換で記述されるため、環境ファイルの作成と同じです。
Notepad++ で新しいファイルを開き、次のような Bash コマンドを記述します。
#!/usr/bin/env bash
set -a
source config.env
set +a
python test.py
コードの最初の行はシバンです。これは通常、Bash スクリプトで記述する必要がある一連の文字です。 ここでは、Bash へのアクセス元のファイル パスが表示されます。
set -a
を使用すると、すべての変数を外部のさまざまな子プロセスにエクスポートできます。 ここで、その子プロセスは、実行する必要がある Python スクリプトです。
Unix 関数 allexport
のショートカットです。
環境ファイルは保存されます。つまり、構文 source config.env
を使用してシェル スクリプトにロードされます。 -a
を使用すると、環境に入る .env
ファイル内のすべての変数をエクスポートできます。
set +a
は set -a
とは反対に機能し、変数のエクスポートをオフにして、他のファイルやコードが影響を受けないようにします。
コードの最後の行は、構文 python test.py
を使用して子プロセスを開始します。 環境内で Python スクリプトを実行し、Python で .env
ファイルを読み取り、Python スクリプトの出力を返します。
シェル スクリプト内のコードを記述したら、その EOL を Unix に変換してから、run.sh
のように .sh
拡張子を付けて保存する必要があります。 環境ファイルと Python スクリプトが配置されているのと同じディレクトリにファイルを保存します。
tree
コマンドを Bash 内で実行すると、同じディレクトリ内の 3つのファイルすべてが表示されます。
jay@DESKTOP-8MEIQB8:/mnt/c/Users/Win 10/try$ tree
.
├── config.env
├── run.sh
└── test.py
上記の手順を完了したら、Bash スクリプトを実行します。
コマンド ライン ランナーを使用して Bash スクリプトを実行する
コマンド プロンプトや PowerShell などのコマンド ライン ランナーは、Windows で Bash スクリプトを実行するのに役立ちます。 より良いオプションは、git-bash
をインストールすることです。これにより、Windows の任意のディレクトリから Bash を直接実行できます。
このセクションでは、両方の方法について説明します。
コマンド プロンプトまたは PowerShell で Bash をインストールする
Windows で Bash を実行するには、Windows Subsystem for Linux
機能または WSL を有効にする必要があります。 [Windows の機能を有効または無効にする] オプション内にあります。
[スタート] メニューに移動し、検索バーでこのオプションを検索します。 それをクリックすると、オプションとチェック ボックスのリストを含むポップアップ ウィンドウが開きます。 Linux用Windowsサブシステム
が見つかるまで下にスクロールし、その横のチェックボックスにチェックマークを付けます.
Windows で WSL が有効になったら、Microsoft ストアに移動し、Ubuntu などの Linux ディストリビューションをインストールします。 インストールしたら、コンピューターを再起動すると、コマンド プロンプトと PowerShell で Bash を使用できるようになります。
正しくインストールされて動作しているかどうかを確認するには、コマンド プロンプトまたは PowerShell に移動し、bash
と記述します。 ターミナルが Bash に切り替わります。
Git-Bash をインストールする
WSL 方式の代替オプションは、Git-Bash 方式です。 Git を使用して、Bash を直接ダウンロードしてシステムにインストールできます。
ダウンロード後、インストーラーを開きます。 インストール先を選択し、その他の設定はすべてデフォルトのままにします。
インストーラーは多くの設定を含む複数のウィンドウを表示するので、インストールが始まるまで繰り返し 次へ
をクリックします。
シェル スクリプトを実行する
Python とシェル スクリプトが保存されているディレクトリで Bash を起動します。 Git-bash を使用している場合は、ディレクトリに直接移動し、右クリックして Git Bash Here
を選択します。
PowerShell またはコマンド プロンプトを使用する場合、必要なディレクトリに移動した後、Bash ターミナルを手動で実行する必要があります。 ディレクトリに入ったら、コマンド bash
を入力します。
Bash 内で、シェル スクリプトを実行する必要があります。 この例では、シェル スクリプトの名前は run.sh
であるため、シェル スクリプトを実行する Bash コマンドは次のようになります。
./run.sh
これにより、環境がアクティブになり、その中で Python スクリプトが実行され、出力が返されます。
Win 10@DESKTOP-8MEIQB8 MINGW64 ~/try
$ ./run.sh
prod
5000
まとめ
この記事では、Python で .env
ファイルを読み取り、.env
ファイルから環境変数を抽出し、それを Python スクリプトで使用する複数の方法について説明します。 読者は、Python コードと .env
ファイルをバインドする .env
ファイルとシェル スクリプトを簡単に作成できるはずです。