2017-01-14 3 views
1

次のように私のフラスコプロジェクトが構成されていますフラスコはAttributeErrorは:モジュールのアプリは「いいえ属性 '実行' を持っている

my_project 
│ 
├── app 
│   ├── __init__.py 
│   ├── api 
│   ├── static 
│   └── templates 
├── config.py 
└── run.py 

アプリ/ __ init__.py

from flask import Flask 

app = Flask(__name__) 

app.config.from_object('config') 

run.py

from app import app 

app.run(
    host=app.config.get('HOST', '0.0.0.0'), 
    port=app.config.get('PORT', 5000) 
) 

これはbefo私はプロジェクトをPython 2からPython 3に移行しようとしていて、python run.pyを実行しても動作しなくなりました。

Traceback (most recent call last): 
    File "/Users/rasmi/Projects/my_project/run.py", line 1, in <module> 
    from .app import app 
ModuleNotFoundError: No module named '__main__.app'; '__main__' is not a package 

は私app.run()ラッピング:

from .app import app 

app.run(
    host=app.config.get('HOST', '0.0.0.0'), 
    port=app.config.get('PORT', 5000) 
) 

私は別のエラーが表示されます。私は1 hereが一致しrun.pyにインポートスタイルを変更した場合

Traceback (most recent call last): 
    File "/Users/rasmi/Projects/my_project/run.py", line 3, in <module> 
    app.run(
AttributeError: module 'app' has no attribute 'run' 

:私は次のエラーを取得しますif __name__ == '__main__':ブロックのコールでも同じ結果が得られます。この問題の原因は何ですか?

答えて

0

appディレクトリの名前を別の名前(たとえばwebapp)に変更してこの問題を修正しました。 from webapp import appを使用して、そのトリックを行います。これは、package directory names take precedence over module names when importingであると考えられます。おそらく__path__を使用すると、これを回避することができます。

0

.をインポートしてアプリをインポートし、if __name__ == '__main__':でアプリを実行してください。

run.py

from app import app 

if __name__ == '__main__': 
    app.run(
     host=app.config.get('HOST', '0.0.0.0'), 
     port=app.config.get('PORT', 5000) 
    ) 

コマンドラインも

my_project$ python run.py 

、あなたが意図したPythonの使用していることを確認しvirtualenvを使用している場合:あなたの場合は

my_project$ which python; python --version 

を〜の周りに*.pycファイルがありますそれらを削除することもできます。

+0

私はこのアプローチを試みました(私の質問の終わりを参照)。 'AttributeError:module 'app'には属性 'run''がありません – rasmi

+0

' AttributeError:' module 'オブジェクトには' run '属性がありません。 'と' 'import app'を使います。 – dm295

関連する問題