言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Python辞典

  1. トップページ
  2. Python辞典
  3. os.environ / os.getenv()

os.environ / os.getenv()

対応: Python 2(2000)

環境変数の取得・設定・確認を行う『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指定した環境変数が存在するか確認します。

サンプルコード

os_environ_basic.py
import os

path = os.environ['PATH']
print(f'PATH: {path}')

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 が設定されていません。')

実行すると次のように出力されます。

python3 os_environ_basic.py
PATH: /usr/local/bin:/usr/bin:/bin
DB接続先: localhost:5432
API_KEY が設定されていません。
os_environ_required.py
import os

def get_required_env(name):
    value = os.getenv(name)
    if value is None:
        raise ValueError(f'環境変数 {name} が設定されていません。')
    return value

try:
    secret = get_required_env('SECRET_KEY')
    print(f'SECRET_KEY: {secret}')
except ValueError as e:
    print(e)

os.environ['MY_APP_DEBUG'] = 'true'
print(os.getenv('MY_APP_DEBUG'))

実行すると次のように出力されます。

python3 os_environ_required.py
環境変数 SECRET_KEY が設定されていません。
true
os_environ_list.py
import os

for key, value in os.environ.items():
    print(f'{key}={value}')

実行すると次のように出力されます。

python3 os_environ_list.py
TERM=xterm-256color
SHELL=/bin/zsh
HOME=/Users/user
PATH=/usr/local/bin:/usr/bin:/bin
...

よくあるミス

よくあるミス1: os.environ[]で存在しない変数を取得する

os.environ['変数名']は変数が存在しない場合にKeyErrorが発生します。存在しない可能性がある変数はos.getenv()を使うとKeyErrorを避けられます。

import os

api_key = os.environ['API_KEY']
print(api_key)

次のように記述します。

import os

api_key = os.getenv('API_KEY', 'default_key')
print(api_key)

よくあるミス2: .envファイルをGitにコミットする

APIキーやパスワードなどの機密情報を含む.envファイルをGitリポジトリに含めると情報漏洩につながります。.gitignoreに追加して管理対象から除外する方法があります。

# .env が .gitignore に書かれていない状態
requirements.txt

次のように記述します。

# .env を管理対象から除外する
.env
requirements.txt

概要

環境変数はプログラムの動作を外部から制御するための仕組みです。データベースの接続情報・APIキー・環境フラグ(本番/開発の切り替えなど)をコードに直接書かずに管理できます。

本番環境での環境変数管理には『python-dotenv』ライブラリが便利です。プロジェクトルートの『.env』ファイルに環境変数を記述し、『load_dotenv()』で読み込む方法が広く使われています。

APIキーやパスワードなどの機密情報を含む『.env』ファイルは『.gitignore』に追加してGitの管理対象から除外する方法があります。誤ってリポジトリに含めると情報漏洩につながります。

コマンドライン引数やシステム情報の取得は『sys.argv / sys.exit() / sys.path』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。