2016-08-25 13 views
0

私はgithubで見つけたWebアプリケーションの構造に基づいています。hereFlaskは親ディレクトリのconfigモジュールを見つけることができません

マイプロジェクトの構造は次のようになります。

~/Learning/flask-celery $ tree 
. 
├── config 
│   ├── __init__.py 
│   └── settings.py 
├── docker-compose.yml 
├── Dockerfile 
├── requirements.txt 
└── web 
    ├── app.py 
    ├── __init__.py 
    ├── static 
    └── templates 
     └── index.html 

私は上記のリンクgithugプロジェクトで見たように、私は、configモジュールの設定値をロードするためにweb/app.pyで私のフラスコアプリが欲しいです。ここで

は、私がweb/app.pyでフラスコアプリをインスタンス化しています方法は次のとおりです。

from flask import Flask, request, render_template, session, flash, redirect, url_for, jsonify 

[...] 

app = Flask(__name__, instance_relative_config=True) 

app.config.from_object('config.settings') 
app.config.from_pyfile('settings.py') 

[...] 

私は取得しています問題は次のとおりです。

明らか
[email protected]:/usr/src/app# python3 web/app.py 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/werkzeug/utils.py", line 427, in import_string 
    module = __import__(module_name, None, None, [obj_name]) 
ImportError: No module named 'config' 
[...] 

、フラスコにconfigモジュールを見つけることができません親ディレクトリは、私に感謝するが、私はリンクされたプロジェクトが私は自分自身をベースにしているどのように正常に同じツリー構造とFlaskの設定コードをモジュールを読み込んでいるのか分からない。

Flaskにconfigモジュールをロードさせるにはどうすればよいですか?

答えて

2

あなたのパスに設定ディレクトリを追加しないと、Pythonパッケージはそれを見ることができません。

コードはwebにあるものにしかアクセスできません。

あなたはそうのようなパッケージにconfigディレクトリを追加することができます。

import os 
import sys 
import inspect 

currentdir = os.path.dirname(
    os.path.abspath(inspect.getfile(inspect.currentframe()))) 
parentdir = os.path.dirname(currentdir) 
sys.path.insert(0, parentdir) 

次にあなたが設定をインポートすることができるはずです。

+0

お返事ありがとうございます。私はこれを試してみるとうまくいくはずですが、リンクされたgithubプロジェクトがどのように動作しているのか不思議です。私は 'instance_relative_config = True'は自分のルートに見えるだろうと思った。 – Juicy

+0

http://flask.pocoo.org/docs/0.11/config/#instance-foldersなぜあなたのインスタント・ワーキングはおそらく実行方法と関係があったのか分かりません。 –

関連する問題