Python で Env ファイルから環境変数を読み取る

Jay Shaw 2023年6月21日
  1. ローカル環境ファイルから環境変数を読み取る
  2. Bash スクリプトを実行して環境変数を読み取る
  3. まとめ
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-dotenvos の 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 +aset -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 ファイルとシェル スクリプトを簡単に作成できるはずです。

関連記事 - Python Environment