Pythonで環境変数を設定・取得するには、os
モジュールを使用するだけです:
import os# Set environment variablesos.environ = 'username'os.environ = 'secret'# Get environment variablesUSER = os.getenv('API_USER')PASSWORD = os.environ.get('API_PASSWORD')# Getting non-existent keysFOO = os.getenv('FOO') # NoneBAR = os.environ.get('BAR') # NoneBAZ = os.environ # KeyError: key does not exist.
なお、辞書キーにgetenv()
やget()
メソッドを使用すると、キーが存在しない場合はNone
が返されます。 しかし、BAZ
の例では、存在しない辞書のキーを参照すると KeyError
が発生します。
環境変数は、コードへのアクセス認証やその他の変数のハードコーディングを回避したい場合に便利です。 たとえば、電子メール通知を送信するために、電子メールサービスプロバイダの API 認証情報を渡す必要があるかもしれませんが、これらの認証情報はコードリポジトリに保存されたくはないでしょう。 また、開発環境、ステージング環境、実稼働環境の間で、コードが微妙に異なる動作をする必要があるかもしれません。 この場合、環境変数を渡すことで、アプリケーションがどのような環境で動作しているかを伝えることができます。
Storing local env variables
Python コードは、実行中のどの環境からでも環境変数にアクセスできるように書く必要があります。 これは、開発のために使用しているローカルの仮想環境か、それをホストしているサービスのどちらかになります。 このプロセスを簡略化する便利なパッケージが Python Decouple で、これはその使用方法です。
$ pip install python-decouple
インストールしたら、プロジェクトのルートに .env
ファイルを作成し、それを開いて環境変数を追加します。
$ touch .env # create a new .env file$ nano .env # open the .env file in the nano text editor
次に、このように環境変数を追加します。 これで環境変数が .env
ファイルに保存されました。 git を使用している場合は、この secret ファイルをコードリポジトリにコミットしないように、.env
を .gitignore
ファイルに追加するのを忘れないようにしてください。
.env
ファイルに環境変数を保存したので、Python コードで次のようにアクセスできます:
from decouple import configAPI_USERNAME = config('USER')API_KEY = config('KEY')
上記のアプローチのようなものを使用する利点は、アプリケーションをクラウド サービスにデプロイするときに、プロバイダーの持つ任意の方法またはインターフェースを使用して環境変数を設定でき、Python コードでそれにアクセスできるようになることです。
ほとんどのクラウドサービスプロバイダーは、ステージング環境または本番環境の環境変数を設定できる CLI または Web インターフェイスを備えていることに注意してください。 このような場合のガイダンスとして、サービスを使用する際に環境変数を設定する方法について、プロバイダーのドキュメントを参照する必要があります。