我的Flask项目的结构如下:
my_project ? ??? app ? ??? __init__.py ? ??? api ? ??? static ? ??? templates ??? config.py ??? run.py
app / __ init__.py:
from flask import Flask app = Flask(__name__) app.config.from_object('config')
运行
from app import app app.run( host=app.config.get('HOST', '0.0.0.0'), port=app.config.get('PORT', 5000) )
这以前曾奏效,但是我试图将我的项目从Python 2迁移到Python 3,并且python run.py
不再运行。我收到以下错误:
Traceback (most recent call last): File "/Users/rasmi/Projects/my_project/run.py", line 3, inapp.run( AttributeError: module 'app' has no attribute 'run'
如果我更改导入样式run.py
以匹配此处的样式:
from .app import app app.run( host=app.config.get('HOST', '0.0.0.0'), port=app.config.get('PORT', 5000) )
我收到另一个错误:
Traceback (most recent call last): File "/Users/rasmi/Projects/my_project/run.py", line 1, infrom .app import app ModuleNotFoundError: No module named '__main__.app'; '__main__' is not a package
将我的app.run()
电话包裹在一个if __name__ == '__main__':
块中会产生相同的结果。是什么导致此问题?
我通过将app
目录重命名为其他名称(例如webapp
)来解决此问题。使用from webapp import app
就可以了。这似乎是因为在导入时,程序包目录名称优先于模块名称。也许使用__path__
它可以解决这个问题。