GAE standard Flask tutorial: ImportError: cannot import name SpooledTemporaryFile
GAE standard Flask tutorial: ImportError: cannot import name SpooledTemporaryFile
我正在尝试使用这个 GAE Flask tutorial。我相信我完全按照它做了,我从 Github 下载了代码,所以没有拼写错误。
当我启动开发服务器 (dev_appserver.py app.yaml
) 并转到 http://localhost:8080/form 时,出现此错误:
Traceback (most recent call last):
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/Users/.../GIT/TEMP/main.py", line 19, in <module>
from flask import Flask, render_template, request
File "/Users/.../GIT/TEMP/lib/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/Users/.../GIT/TEMP/lib/werkzeug/__init__.py", line 151, in <module>
__import__('werkzeug.exceptions')
File "/Users/.../GIT/TEMP/lib/werkzeug/exceptions.py", line 71, in <module>
from werkzeug.wrappers import Response
File "/Users/.../GIT/TEMP/lib/werkzeug/wrappers.py", line 37, in <module>
from werkzeug.formparser import FormDataParser, default_stream_factory
File "/Users/.../GIT/TEMP/lib/werkzeug/formparser.py", line 14, in <module>
from tempfile import SpooledTemporaryFile
ImportError: cannot import name SpooledTemporaryFile
貌似和GAE沙盒有关系,但我想不通。我在 virtualenv 内部和外部都尝试了 运行 开发服务器。
在将 virtualenv 与 App Engine 一起使用时,您是否需要做一些特别的事情?
本教程指定使用 Flask 版本 0.12.2。
Flask 的 setup.py 需要版本 0.7 之后的任何版本的 werkzeug
install_requires=[
'Werkzeug>=0.7',
'Jinja2>=2.4',
'itsdangerous>=0.21',
'click>=2.0',
],
在 werkzeug 0.13 中,this commit 与添加对分块传输编码的支持相关,将 SpooledTemporaryFile
的导入添加到 werkzeug.formparser
。
App Engine 沙箱 disables any imports from the tempfile
module apart from tempfile.TemporaryFile
,因此出现错误。
要解决此问题,请将 werkzeug 降级到版本 0.12.2,其中不包括导入。
pip install --target lib --upgrade werkzeug==0.12.2
(pip --upgrade
强制安装提供的版本,因此它会降级和升级)
或修改您的供应商要求文件以固定 werkzeug 版本
Flask==0.12.2
werkzeug==0.12.2
更新:
此问题现已在 Google Samples Docs repo and Werkzeug v0.14 中得到解决。
我最近也遇到这个错误
我的 Python stand 环境下的版本是 2.7.14。
相信前几天有更新,干扰这个包
我的,参考Github问题here中提到的解决方案。
我只是将其添加到 appengine_config.py 文件中:
import tempfile
tempfile.SpooledTemporaryFile = tempfile.TemporaryFile
那么我的项目就像魅力一样。
link 也提到如果你使用早期版本的 Python 2.7 可能会解决问题,但我没有尝试过解决方案。
我正在尝试使用这个 GAE Flask tutorial。我相信我完全按照它做了,我从 Github 下载了代码,所以没有拼写错误。
当我启动开发服务器 (dev_appserver.py app.yaml
) 并转到 http://localhost:8080/form 时,出现此错误:
Traceback (most recent call last):
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/Users/.../google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/Users/.../GIT/TEMP/main.py", line 19, in <module>
from flask import Flask, render_template, request
File "/Users/.../GIT/TEMP/lib/flask/__init__.py", line 17, in <module>
from werkzeug.exceptions import abort
File "/Users/.../GIT/TEMP/lib/werkzeug/__init__.py", line 151, in <module>
__import__('werkzeug.exceptions')
File "/Users/.../GIT/TEMP/lib/werkzeug/exceptions.py", line 71, in <module>
from werkzeug.wrappers import Response
File "/Users/.../GIT/TEMP/lib/werkzeug/wrappers.py", line 37, in <module>
from werkzeug.formparser import FormDataParser, default_stream_factory
File "/Users/.../GIT/TEMP/lib/werkzeug/formparser.py", line 14, in <module>
from tempfile import SpooledTemporaryFile
ImportError: cannot import name SpooledTemporaryFile
貌似和GAE沙盒有关系,但我想不通。我在 virtualenv 内部和外部都尝试了 运行 开发服务器。
在将 virtualenv 与 App Engine 一起使用时,您是否需要做一些特别的事情?
本教程指定使用 Flask 版本 0.12.2。
Flask 的 setup.py 需要版本 0.7 之后的任何版本的 werkzeug
install_requires=[
'Werkzeug>=0.7',
'Jinja2>=2.4',
'itsdangerous>=0.21',
'click>=2.0',
],
在 werkzeug 0.13 中,this commit 与添加对分块传输编码的支持相关,将 SpooledTemporaryFile
的导入添加到 werkzeug.formparser
。
App Engine 沙箱 disables any imports from the tempfile
module apart from tempfile.TemporaryFile
,因此出现错误。
要解决此问题,请将 werkzeug 降级到版本 0.12.2,其中不包括导入。
pip install --target lib --upgrade werkzeug==0.12.2
(pip --upgrade
强制安装提供的版本,因此它会降级和升级)
或修改您的供应商要求文件以固定 werkzeug 版本
Flask==0.12.2
werkzeug==0.12.2
更新:
此问题现已在 Google Samples Docs repo and Werkzeug v0.14 中得到解决。
我最近也遇到这个错误
我的 Python stand 环境下的版本是 2.7.14。
相信前几天有更新,干扰这个包
我的,参考Github问题here中提到的解决方案。
我只是将其添加到 appengine_config.py 文件中:
import tempfile
tempfile.SpooledTemporaryFile = tempfile.TemporaryFile
那么我的项目就像魅力一样。 link 也提到如果你使用早期版本的 Python 2.7 可能会解决问题,但我没有尝试过解决方案。