首页 > 解决方案 > 当我将主 Flask python 文件移动到模块中时,`gcloud app deploy` 会抛出`No module named 'main'`

问题描述

我有一个非常简单的 Flask 应用程序,由一个文件组成,main.py.

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return "Hello world."

我在项目目录中还有另一个文件app.yaml,它由一行组成:

runtime: python37

如果我gcloud app deploy在这个或烧瓶运行上运行,该页面在谷歌云和本地都正确呈现,显示一个显示“Hello world”的页面。

但是,如果我移至main.py./app/__init__.pygcloud app deploy不再呈现页面(即使flask run仍然正常运行!)给我一个 502 Bad Gateway 错误。日志给出了错误:

File "/env/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
ModuleNotFoundError: No module named 'main'"  

关于这里的问题有什么想法吗?

标签: pythongoogle-app-engineflaskgoogle-cloud-platform

解决方案


如果您未entrypoint在 YAML 文件中定义,App Engine 将配置并启动 Gunicorn 网络服务器。

GCloud 提供的默认配置为:

gunicorn -b :$PORT main:app

因此,如果您的入口点不是,则需要配置入口点字段main.py


推荐阅读