環境
- PythonAnywhere
- Python 3.9
- GNU bash 5.0.17(1)-release (x86_64-pc-linux-gnu)
ディレクトリ構成
/
└ home/
└ USERNAME/
└ mysite/
├ static/
├ templates/
├ .env
└ flask_app.py
手順
1. 環境変数をプロジェクトフォルダー直下の .env
に保存
1-1. Bash Console を用いる方法
Consoles タブをクリックし、Bash Console で以下を実行
cd ~/mysite
echo "export SECRET_KEY=sekritvalue" >> .env
echo "export OTHER_SECRET=somethingelse" >> .env
1-2. 直接 .env
を作成する方法
Files タブをクリックし、プロジェクトフォルダー直下に .env
を作成
SECRET_KEY=sekritvalue
OTHER_SECRET=somethingelse
2. python-dotenv
のインストール
古いバージョンでは .env
ファイルの行頭で export
を処理できないため、少なくともバージョン0.8の python-dotenv
パッケージであることを確認する。
2-1. virtualenv
を使用している場合
workon my-virtualenv-name
pip install python-dotenv
echo python-dotenv >> requirements.txt # 必要であれば
2-2. virtualenv
を使用していない場合
python3.8 -m pip --user install python-dotenv
echo python-dotenv >> requirements.txt # 必要であれば
詳しくはこちらを参考に
3. 環境変数を利用できるようにする
環境変数の利用が
- Webアプリ自体の場合
→ 3-1. WSGI ファイルに .env ファイルをロード
(インターネット上で実際にWebアプリを提供しているワーカープロセスが環境変数を利用できるようにする) - Bashコンソールの場合
→ 3-2. virtualenv の postactivate スクリプトに .env ファイルをロード
(データベースの移行を実行している、またはWebアプリと他のコマンドライン操作を行っている)
3-1. WSGI
ファイルに .env
ファイルをロード
Web タブをクリックし、Code 欄の WSGI
ファイルへのリンク /var/www/USERNAME_pythonanywhere_com_wsgi.py
をクリック -> 末尾に以下のコードを追加
# このファイル内で project_home = '/home/USERNAME/mysite' と設定されている前提
import os
from dotenv import load_dotenv
# プロジェクトフォルダ直下に.envを置く場合
load_dotenv(os.path.join(project_home, '.env'))
# プロジェクトフォルダ直下に置かない場合
project_folder = os.path.expanduser('~/mysite')
load_dotenv(os.path.join(project_folder, '.env'))
環境変数の使用法
os.getenv
で変数にアクセスできるようになる
import os
SECRET_KEY = os.getenv("SECRET_KEY")
3-2. virtualenv
の postactivate
スクリプトに .env
ファイルをロード
Bashコンソールで .env
ファイルから環境変数をロード
set -a; source ~/mysite/.env; set +a
Webアプリに virtualenv
を使用していると仮定し、virtualenvwrapper/workon
を使用していると仮定すると、Bashコンソールセッションで使用できる環境変数を設定する便利な場所は、postactivate
と呼ばれる特別なスクリプト。 virtualenv
をアクティブ化するたびに自動的に実行される。一般的な場所は、/home/USERNAME/.virtualenvs/my-project-virtualenv/bin/postactivate
上記の source
コマンドを postactivate
スクリプトに追加
echo 'set -a; source ~/mysite/.env; set +a' >> ~/.virtualenvs/my-project-virtualenv/bin/postactivate
例えば、workon my-project-virtualenv
を使用して virtualenv
をアクティブ化し、次に echo $SECRET_KEY
を実行して、これをテストする。
これで、環境変数がWebアプリと virtualenv
の両方に自動的に読み込まれる。
参考