2020-04-05

【Heroku】Python で環境変数(.env)を読み込む方法

APIキーやトークン・パスワードなど、git で管理をしたくない(するべきでない)機密データを取り扱う際、一般に利用される手段の一つとして .env があります。

VPS やレンタルサーバであればディレクトリ内に直接作成・記述できますが、Heroku CLI のように git 経由でデプロイする場合はどうするのかな~と思い調べたのでメモ。コマンドが用意されてました。

ローカルで .env を読み込むには

python-dotenv を利用します。

bash

pip install python-dotenv

ファイルを以下のように記述。

.env

BOT_TOKEN=abc-1234-xyz

main.py

import os
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

BOT_TOKEN = os.environ.get("BOT_TOKEN")

print(BOT_TOKEN) # abc-1234-xyz

当然、git での管理は行いません。

.gitignore

.env

Heroku では

heroku-cli の config コマンドで環境変数を設定します。アプリケーション名を APP_NAME とします。

bash

heroku login
heroku config:set BOT_TOKEN="abc-1234-xyz" -a APP_NAME
# 確認する場合
heroku config:get BOT_TOKEN -a APP_NAME

これで環境変数に BOT_TOKEN=abc-1234-xyz が追加されます。

Heroku上では上記コマンドで環境変数が設定されるため、 .env ファイルは生成/読込されませんが、そのままデプロイしてしまうと依存パッケージ不足でエラーとなってしまいます。そのため、requirements.txt に python-dotenv を記述しておきましょう。

requirements.txt

python-dotenv

あとは runtime.txtProcfile をアプリケーションのタイプに応じて記述してデプロイすれば完了です。

参考