【问题标题】:GAE flask: ImportError: No module named appGAE烧瓶:ImportError:没有名为app的模块
【发布时间】:2023-09-14 17:09:01
【问题描述】:

这是我的结构

NotificationSys
 app.yaml
 main.py
 email.py
 ...

这是我的 app.yaml

handlers:
 - url: /email/.*  
   script: email.app

 - url: .*  # This regex directs all routes to main.app
   script: main.app
 ...

我的电子邮件.py

# -*- coding: utf-8 -*-
from flask import Flask, request
from google.appengine.api import mail
import urllib, urllib2, json, datetime, time, converttime, variables, jinja2
from variables import *
app = Flask(__name__)
jinja_environment = jinja2.Environment(autoescape=True,
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))
@app.route('/placement_report')

main 下的链接可以正常工作,但是当我向 /email/something 发出请求时 给出了这个错误 ImportError: 没有名为 app 的模块

【问题讨论】:

  • 您至少需要在电子邮件模块中显示app 的定义。您应该提供minimum code to reproduce the problem
  • @snakecharmerb app = Flask(__name__)
  • 为什么app = Flask(__name__) 在您的电子邮件文件中?

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


【解决方案1】:
  1. 你应该在一个文件中只有一个app 对象。如果您在每个文件中创建一个新的 Flask 应用程序对象,那就错了。定义一次并导入。

  2. 最可能的问题是email.py 与您正在使用的库发生冲突。更改该文件的名称。

【讨论】:

  • 是的,2 是问题所在。你能告诉我1背后的原因吗? cloud.google.com/appengine/docs/standard/python/config/… 她的示例包含两个应用程序。 `处理程序: - url:/profile/.* 脚本:user_profile.app 登录:必需 - url:/admin/.* 脚本:admin.app 登录:admin - url:/.* 脚本:welcome.app`
  • 我想澄清一下:您指向的 App Engine 文档不是特定于 Flask 的,而是一般来说,对于 WSGI,它看起来像。从技术上讲,您可以在同一 Web 服务器上运行多个应用程序,如果您想要一些分离和划分,这可能是明智的。但根据经验,这不是 Flask 程序员所做的。
  • 每个 Flask 应用程序都有配置数据、模板、路由请求的规则等等。如果你有两个 Flask 应用程序,那么你就有了两次——可能是重叠的。也许在某些极端情况下这是可取的,但我认为这并不常见。
【解决方案2】:

我将处理程序 email.app 的名称更改为 emailer.app,并将文件的名称更改为 emailer.py,一切正常。很可能它与某些库名称 email.py 中的某些文件冲突。

【讨论】:

    最近更新 更多