1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Pythonanywhere】環境変数の設定(SECRET_KEYなど)

Last updated at Posted at 2022-03-16

環境

  • 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. Bash Console を用いる方法
  2. 直接 .env を作成する方法

1-1. Bash Console を用いる方法

Consoles タブをクリックし、Bash Console で以下を実行

Bash
cd ~/mysite
echo "export SECRET_KEY=sekritvalue" >> .env
echo "export OTHER_SECRET=somethingelse" >> .env

1-2. 直接 .env を作成する方法

Files タブをクリックし、プロジェクトフォルダー直下に .env を作成

.env
SECRET_KEY=sekritvalue
OTHER_SECRET=somethingelse

2. python-dotenv のインストール

  1. virtualenv を使用している場合
  2. virtualenv を使用していない場合

古いバージョンでは .env ファイルの行頭で export を処理できないため、少なくともバージョン0.8の python-dotenv パッケージであることを確認する。

2-1. virtualenv を使用している場合

Bash
workon my-virtualenv-name
pip install python-dotenv
echo python-dotenv >> requirements.txt # 必要であれば

2-2. virtualenv を使用していない場合

Bash
python3.8 -m pip --user install python-dotenv
echo python-dotenv >> requirements.txt # 必要であれば

詳しくはこちらを参考に

3. 環境変数を利用できるようにする

環境変数の利用が

  1. Webアプリ自体の場合
    3-1. WSGI ファイルに .env ファイルをロード
    (インターネット上で実際にWebアプリを提供しているワーカープロセスが環境変数を利用できるようにする)
  2. 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 で変数にアクセスできるようになる

py
import os
SECRET_KEY = os.getenv("SECRET_KEY")

3-2. virtualenvpostactivate スクリプトに .env ファイルをロード

Bashコンソールで .env ファイルから環境変数をロード

Bash
set -a; source ~/mysite/.env; set +a

Webアプリに virtualenv を使用していると仮定し、virtualenvwrapper/workon を使用していると仮定すると、Bashコンソールセッションで使用できる環境変数を設定する便利な場所は、postactivate と呼ばれる特別なスクリプト。 virtualenv をアクティブ化するたびに自動的に実行される。一般的な場所は、/home/USERNAME/.virtualenvs/my-project-virtualenv/bin/postactivate

上記の source コマンドを postactivate スクリプトに追加

Bash
echo 'set -a; source ~/mysite/.env; set +a' >> ~/.virtualenvs/my-project-virtualenv/bin/postactivate

例えば、workon my-project-virtualenv を使用して virtualenv をアクティブ化し、次に echo $SECRET_KEY を実行して、これをテストする。

これで、環境変数がWebアプリと virtualenv の両方に自動的に読み込まれる。

参考

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?