使用 Google App Engine 时无法导入 Flask
Posted
技术标签:
【中文标题】使用 Google App Engine 时无法导入 Flask【英文标题】:Can't import Flask while using Google App Engine 【发布时间】:2012-04-26 10:26:47 【问题描述】:我正在关注 this guide 并尝试开发一个 Flask 应用程序以在 Google App Engine 上运行。我按照这封信的指南进行操作,但是当我从 Launcher 启动开发应用服务器并转到 http://localhost:8080/ 时,我收到了 HTTP 500 错误。
我查看了日志,上面写着No module named flask
。然后我通过运行import flask
检查管理控制台中的交互式控制台,并收到相同的错误消息。我可以在任何其他 python 文件中导入烧瓶而不会出错。
有没有办法解决这个问题?
【问题讨论】:
在交互控制台中,您可以执行“import sys; print sys.path”并检查 flask 是否在您的 PYTHONPATH 上。听起来好像不是。 您是否在应用的源代码树中包含了flask? @NickJohnson 成功了。出于某种原因,我没有想到它,我在指南中有些错过了这一点。不过有道理。谢谢。 【参考方案1】:您是否安装了 Python 的 Extra Libraries 组件?可以安装
gcloud components install app-engine-python-extras
安装这个额外的库后,您应该能够毫无问题地使用内置的烧瓶库。更多信息请参考this page
Source
【讨论】:
【参考方案2】:我也面临同样的问题,在花了 1 天的时间后发现我的愚蠢错误实际上是在重构我的烧瓶应用程序时我已经改变了
appengine_config.py
换成其他名字。
如果您的所有依赖项仅在 lib
文件夹中,理想情况下 appengine_config.py
应该如下所示
from google.appengine.ext import vendor
#Add any libraries installed in the "lib" folder.
vendor.add('lib')
因为它无法找到并执行appengine_config.py
,所以lib
文件夹没有注册为依赖文件夹。要检查,您可以尝试在appengine_config.py
中打印一些内容,以检查它是否在服务器启动时执行。
【讨论】:
【参考方案3】:tldr:使用 appengine_config.py 并将您的 virtualenv 复制到名为 lib 的文件夹中,然后确保您正在通过 dev_appserver.py 运行应用程序
(以下是通过 ubuntu 中的 bash) 所以经过长时间的战斗,我发现虚拟环境和 gcloud 玩得不好 -
我从我的虚拟环境目录中复制了所有内容
.../.virtualenvs/nimble/local/lib/python2.7/site-packages
进入
[projectdir]/lib
我的 appengine_config.py 终于像在云端一样在本地工作了,但我绝对必须运行
dev_appserver.py [my proj dir here]
否则 google.appengine 模块将无法加载。不知道我应该使用开发服务器。我觉得自己很笨。
作为参考,这里是 appengine_config.py
"""`appengine_config` gets loaded when starting a new application instance."""
print 'running app config yaya!'
from google.appengine.ext import vendor
vendor.add('lib')
print 'I am the line after adding lib, it should have worked'
import os
print os.getcwd()
【讨论】:
【参考方案4】:通常,模板带有requirements.txt
。如果没有,请在此处添加依赖项,然后运行 pip install -t lib -r requirements.txt
以强制将库保存在 lib
文件夹中。
请确保您已将 lib
添加到 appengine_config.py
和 vendor.add('lib')
(如果尚不存在)。
【讨论】:
您的意思是pip install -t lib -r requirements.txt
,requirements.txt 参数需要紧跟在-r
标志之后【参考方案5】:
使用 GAE 和 Flask 我已经意识到这一点:
直接使用 Python 运行
要直接使用 python (python app.py
) 运行应用程序,您需要使用以下命令在您的环境中安装依赖包:pip install flask
使用 dev_appserver.py 运行
要使用 GAE SDK 提供的 dev_appserver.py 运行应用程序,您需要在项目中包含所有依赖包,例如:Flask、jinja2... 在我的另一个答案中查看如何配置此包的示例:https://***.com/a/14248647/1050818
更新
在 Windows 上运行 Python、Virtualenv、Flask 和 GAE
安装 Python
-
安装 Python http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
点击Windows开始按钮,通过“编辑系统环境”搜索并打开
转到高级选项卡并单击“环境变量...”按钮
“环境变量”窗口打开后,从“系统变量”列表中选择“路径”并单击“编辑...”
将此
;C:\Python27;C:\Python27\Scripts
添加到值的末尾并保存
安装 setuptools MS Windows 安装程序(需要在 Windows 上安装 PIP)
-
在此页面中为您选择正确的安装程序http://pypi.python.org/pypi/setuptools#files(我使用了这个:http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe#md5=57e1e64f6b7c7f1d2eddfc9746bbaf20)
下载安装程序并安装它
安装 PIP
-
下载画中画http://pypi.python.org/pypi/pip#downloads
解压到任意文件夹
在该目录中,键入
python setup.py install
安装 Virtualenv
-
执行
pip install virtualenv
执行此mkdir c:\virtualenvs
以创建虚拟环境的文件夹
执行此cd c:\virtualenvs
以访问该文件夹
执行virtualenv flaskdemo
为您的项目创建一个virtualenv
激活 virtualenv c:\virtualenvs\flaskdemo\scripts\activate
安装 Google App Engine SDK
-
安装SDK https://developers.google.com/appengine/downloads
创建项目
-
为您的项目创建一个目录
创建您的应用程序的主体https://github.com/maxcnunes/flaskgaedemo/blob/master/main.py
为 Google App Engine https://github.com/maxcnunes/flaskgaedemo/blob/master/app.yaml 创建应用程序的配置
创建一个文件让 GAE 初始化您的应用程序https://github.com/maxcnunes/flaskgaedemo/blob/master/initialize_gae.py
(在此处查看代码示例:https://github.com/maxcnunes/flaskgaedemo)
安装 Flask 以在本地运行
-
执行
pip install flask
安装 Flask 以在 GAE 上运行
-
下载 Flask https://github.com/mitsuhiko/flask/archive/0.9.zip 并提取项目中的文件夹 flask
下载 Werkzeug https://github.com/mitsuhiko/werkzeug/archive/0.8.3.zip 并解压缩项目中的 werkzeug 文件夹
下载 Jinja2 https://github.com/mitsuhiko/jinja2/archive/2.6.zip 并在您的项目中提取文件夹 jinja2
下载 Simple Json https://github.com/simplejson/simplejson/archive/v3.0.5.zip 并在您的项目中提取文件夹 simplejson
使用 GAE SDK 运行应用程序
-
打开 Google App Engine 启动器
添加新应用程序
运行应用程序
点击浏览按钮在浏览器上打开您的应用程序
最后点击 Deploy 按钮来部署你的应用程序
【讨论】:
我正在按照原帖中提到的相同教程进行操作,但遇到了同样的错误。在我的虚拟环境中列出了烧瓶,这意味着它就在那里。我正在使用 Windows,您对可能导致问题的原因有什么建议吗? 我的烧瓶应用程序有很长的依赖项列表。您在“安装 Flask 以在 GAE 上运行”的步骤似乎暗示我现在需要手动安装它们?我有完整的 requirements.txt 被推送,并且有一个 appengine_config.py 没有记录任何错误,flask 安装得很好,它只是在我的 requirements.txt 中的 flask_sqlalchemy 中死掉,并且在本地运行良好以上是关于使用 Google App Engine 时无法导入 Flask的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 应用在部署到 Google App Engine 时无法连接到 Google Cloud SQL (PostgreSQL)
Google App Engine 远程 API 无法从本地客户端运行
建立数据库连接时出错:Google App Engine Deploy
java.lang.NoClassDefFoundError:部署到Google App Engine时无法初始化类net.sf.cglib.proxy.Enhancer。