Flaskでinstanceフォルダが認識されない場合の対処方法
Dec 26, 2017 · webpython
virtualenvの環境でFlaskのinstanceフォルダがうまく認識されなかった時の対処方法
状況
環境としては、IDEにPyCharmを利用。Pythonはvirtualenvの仮想環境を利用
Project
- main.py
- instance
- app.cfg
みたいな感じのフォルダ構成で
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('app.cfg')
とすると、正しくはinstanceフォルダ内のapp.cfgの設定が読み込まれるはずだが、
このファイルが見つからないとエラーになっていた
instance_pathで絶対パスを指定すると正しく読み込まれるが、
Bluemixで使う実装なので絶対パスは使いたくなかった
で、デバッガでパスを見ると、PyCharm.appの中のbinが指定されていた・・・
原因
結論から言うと、フォルダ構成が
Project
- main.py
- instance
- app.cfg
- venv # <-ここがNG
となっていたのが原因。どうやらプロジェクト直下にvenvがあると、正しく認識してくれないらしい
(詳細は参考リンクを参照)
特にPyCharmの場合だとデフォルトで新しい仮想環境をプロジェクト直下に作ってくれるのでハマってしまった・・・
対処方法
仮想環境をプロジェクト直下ではなく別のフォルダに構築する。今回だと
Project
- main.py
- instance
- app.cfg
venv
という様にProject直下ではないところに仮想環境を構築したら改善した
PyCharmでの修正手順
- 既存の仮想環境を削除
Preferences-Project:-Project Interpreterを開くProject Interpreterの右端にある「歯車」アイコン -Show All...を開く- 現在のプロジェクトのものを選択し、左下の「ー」で削除
- 新しい仮想環境を作成
- 左下の「+」 -
Add Localを開く Virtualenv Environment-New environmentにチェックLocationにプロジェクト直下以外を選択して作成(他は任意に選択)
- 左下の「+」 -
Project Interpreterのリストボックスに2で作った仮想環境が出てくる様になるので選択- 設定画面を閉じるとモジュールのインストールの確認画面が出てくるのでインストールする
- 実行時の設定を変更
- メニューの
Run-Edit Configurationsを選択 Working directoryにプロジェクトのフォルダ位置を指定する
- メニューの
