Flask结构 -- 无法从__init__.py导入应用程序

5 投票
1 回答
7263 浏览
提问于 2025-04-18 12:13

我刚开始学Python,最近在用__init__.py设置我的应用结构时遇到了很多麻烦,虽然我查了好几个教程。

现在,我的目录结构大概是这样的:

/parent
   /myapp
       __init__.py
       views.py
   /virtualenv

之前,我的结构是这样的(如果有区别的话):

/parent
   /myapp
   /bin
   /include
   /lib

__init__.py文件的内容如下:

 from flask import Flask
 app = Flask(__name__)

还有我的views.py文件:

 from myapp import app
 @app.route('/')
 def test():
    return 'This is a new test'

 if __name__ == '__main__':
    app.run(debug=True)

如果myapp是通过init文件初始化的,为什么我在views里不能调用它呢?我收到一个错误提示,说明“我无法导入app,并且没有名为myapp的模块”。如果我把init文件删掉,把内容复制到views.py文件的顶部,一切就正常了。

1 个回答

10

你现在把 views 当成主要的脚本在用。可是,你不能把脚本放在一个包里面;它所在的目录不能被当作包来处理。Python 会把 parent/myapp 这个目录加到 Python 的路径中,而不是 parent 这个路径。

你需要在最上层(也就是和 myapp 同级)添加一个 单独 的脚本:

from myapp import app

if __name__ == '__main__':
    app.run(debug=True)

然后在 __init__.py 文件里添加一行代码来导入你的视图:

from flask import Flask
app = Flask(__name__)

import views

最后,把 views.py 文件里的 if __name__ == '__main__': 这一块去掉。

撰写回答