Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
os.environ / os.getenv()
環境変数の取得・設定・確認を行う『os』モジュールの属性と関数です。データベースのパスワードやAPIキーなどの機密情報を、コードに直接書かずに外部から渡す仕組みとして使われます。
構文
import os
# 全環境変数を辞書として取得します。
os.environ
# 環境変数の値を取得します(存在しない場合は KeyError)。
os.environ['変数名']
# 環境変数の値を取得します(存在しない場合はデフォルト値を返す)。
os.getenv('変数名', デフォルト値)
# 環境変数を設定します(現在のプロセスのみに影響します)。
os.environ['変数名'] = '値'
関数・属性一覧
| 属性 / 関数 | 概要 |
|---|---|
| os.environ | 現在の環境変数を辞書風のオブジェクトとして返します。通常の辞書と同様にアクセス・変更できます。 |
| os.environ['変数名'] | 指定した環境変数の値を文字列で返します。存在しない場合は『KeyError』が発生します。 |
| os.getenv('変数名') | 指定した環境変数の値を返します。存在しない場合は『None』を返します。 |
| os.getenv('変数名', デフォルト値) | 環境変数が存在しない場合に指定したデフォルト値を返します。 |
| os.environ['変数名'] = '値' | 現在のプロセスの環境変数を設定します。子プロセスにも引き継がれますが、シェルの環境変数には影響しません。 |
| os.environ.get('変数名', デフォルト値) | 辞書の『get()』メソッドと同様に、存在しない場合にデフォルト値を返します。 |
| '変数名' in os.environ | 指定した環境変数が存在するか確認します。 |
サンプルコード
import os
# 環境変数の値を取得します。
path = os.environ['PATH']
print(f'PATH: {path}')
# getenv() で存在しない場合にデフォルト値を返します。
db_host = os.getenv('DB_HOST', 'localhost')
db_port = os.getenv('DB_PORT', '5432')
print(f'DB接続先: {db_host}:{db_port}')
# 環境変数の存在確認をしてから取得します。
if 'API_KEY' in os.environ:
api_key = os.environ['API_KEY']
print(f'APIキーが設定されています。')
else:
print('API_KEY が設定されていません。')
# 必須の環境変数が未設定のときはエラーにします。
def get_required_env(name: str) -> str:
value = os.getenv(name)
if value is None:
raise ValueError(f'環境変数 {name} が設定されていません。')
return value
try:
secret = get_required_env('SECRET_KEY')
except ValueError as e:
print(e)
# 環境変数を設定します(現在のプロセスのみ有効)。
os.environ['MY_APP_DEBUG'] = 'true'
print(os.getenv('MY_APP_DEBUG')) # 『true』と出力されます。
# 全環境変数を一覧します。
for key, value in os.environ.items():
print(f'{key}={value}')
概要
環境変数はプログラムの動作を外部から制御するための仕組みです。データベースの接続情報・APIキー・環境フラグ(本番/開発の切り替えなど)をコードに直接書かずに管理できます。
本番環境での環境変数管理には『python-dotenv』ライブラリが便利です。プロジェクトルートの『.env』ファイルに環境変数を記述し、『load_dotenv()』で読み込む方法が広く使われています。
APIキーやパスワードなどの機密情報を含む『.env』ファイルは必ず『.gitignore』に追加してGitの管理対象から除外してください。誤ってリポジトリに含めると情報漏洩につながります。
コマンドライン引数やシステム情報の取得は『sys.argv / sys.exit() / sys.path』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。