【问题标题】:ImportError: cannot import name Flask in app engineImportError:无法在应用引擎中导入名称 Flask
【发布时间】:2017-10-22 04:31:35
【问题描述】:

我正在尝试在谷歌应用引擎中使用此link 部署示例烧瓶示例。当我尝试在本地使用 dev_appserver.py 运行它时,它工作正常。但在部署后谷歌云,它一直向我显示导入烧瓶错误。

浏览了所有 stackoverflow 解决方案,但没有任何效果。 请告诉我我做错了什么

main.py

# [START app]
import logging
import sys
from os.path import expanduser, os, dirname


from flask import Flask, render_template, request

user_home = expanduser("~")
sys.path.append(user_home + 'flask/lib')

app = Flask(__name__)



# [START form]
@app.route('/form')
def form():
    return render_template('form.html')
# [END form]


# [START submitted]
@app.route('/submitted', methods=['POST'])
def submitted_form():
    name = request.form['name']
    email = request.form['email']
    site = request.form['site_url']
    comments = request.form['comments']

    # [END submitted]
    # [START render_template]
    return render_template(
        'submitted_form.html',
        name=name,
        email=email,
        site=site,
        comments=comments)
    # [END render_template]


@app.errorhandler(500)
def server_error(e):
    # Log the error and stacktrace.
    logging.exception('An error occurred during a request.')
    return 'An internal error occurred.', 500

app.yaml

runtime: python27
api_version: 1

threadsafe: true
entrypoint: gunicorn -b :$PORT main.app


# [START handlers]
handlers:

- url: /.*
  script: main.app
# [END handlers]

【问题讨论】:

    标签: python python-2.7 google-app-engine google-app-engine-python


    【解决方案1】:

    要在 App Engine 标准环境中使用 Flask,您需要使用 lib 文件夹和 appengine_config.py 文件来供应它。它(尚未)打包为内置库,因此您不能只在 app.yaml 的 libraries 部分中声明它。

    有关所有详细信息,请参阅入门文档中的 Setting up libraries to enable development 部分,但这里是最低版本:

    首先在应用程序的根目录(包含 app.yaml 的文件夹)中创建一个 lib 文件夹,然后使用 pip 在其中安装 Flask 及其依赖项:

    mkdir lib
    pip install -t lib flask
    

    现在在同一文件夹中创建一个名为 appengine_config.py 的文件,其中包含以下内容:

    from google.appengine.ext import vendor
    vendor.add('lib')
    

    部署应用程序后,包括 appengine_config.pylib 文件夹,您应该可以像往常一样导入 flask。

    【讨论】:

    • 尝试了同样的方法,仍然得到同样的错误。我创建了一个文件名 requirements.txt ,在文件中输入了所有需要的库并使用 pip install -t lib -r requirements.txt 来安装依赖项
    • 您是否还创建了 appengine_config.py?如果不这样做,您将无法从“lib”文件夹中导入文件。
    • 我在某处找到了这个解决方案,显然现在它工作正常on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development') if on_appengine and os.name == 'nt': sys.platform = "Not Windows"
    • 我对添加该代码如何有助于解决 ImportError 感到困惑。当您在 Windows 上的 dev_appserver.py 下运行时,所做的只是更改 sys.platform...
    • Google 现在(2021 年 3 月)表示 Flask 包含在运行时中。由于某种原因,我在一个月前还可以的应用程序中遇到了同样的错误。我知道是时候从 2 迁移到 3。cloud.google.com/appengine/docs/standard/python/tools/…
    【解决方案2】:

    如果有助于将烧瓶依赖添加到您的 app.yaml 中,请尝试

    libraries:
    - name: flask
      version: latest
    

    【讨论】:

    • 它在部署时给我以下错误:错误:(gcloud.app.deploy)解析文件时发生错误库“flask”不受支持
    【解决方案3】:

    检查同一文件夹下是否有名为flask.py的文件。如果找到,请将其重命名为其他名称。

    【讨论】:

    • 我查了一下,文件夹中没有文件名为flask.py的文件。
    • 很抱歉,我现在不知道为什么。也许你可以做一个virtualenv,然后再试一次。
    • 我已经按照谷歌应用引擎文档中提到的说明为烧瓶创建了一个 virtualenv。这就是我被卡住的地方,因为它没有提到如何解决它
    猜你喜欢
    • 2018-08-10
    • 2019-05-01
    • 1970-01-01
    • 2022-01-12
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多