GAE导入错误; sys.path 显示 appengine 库的路径错误

GAE import errors; sys.path shows wrong path for appengine libraries

我正在 Windows 10 上的 Python 中为 Google App Engine 开发网络应用程序。当我的 main.py 只是提供模板时,一切正常。

import os
import urllib
from google.appengine.api import users
import jinja2
import webapp2

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)

但是后来我尝试添加云存储,无论我尝试什么库都出现导入错误。所以我从 main.py 中删除了这些引用,现在我在 jinja2 中遇到错误,它一直工作正常!

ImportError: No module named jinja2

我不记得我尝试过的所有事情,但这是我所知道的:

编辑:

我一路剥离main.py新项目模板,

import webapp2

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello world!')

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

现在我收到 webapp2 的导入错误:

ImportError: No module named webapp2

编辑 2:

通过将其插入我的 main.py、

的顶部
import sys
print sys.path

我可以看到所有 google 包的错误路径:

'C:\Program Files (x86)\Google\lib\webapp2-2.5.2', 
'C:\Program Files (x86)\Google\lib\pycrypto-2.6', 
'C:\Program Files (x86)\Google\lib\jinja2-2.6', 
'C:\Program Files (x86)\Google\lib\markupsafe-0.15', 
'C:\Program Files (x86)\Google\lib\setuptools-0.6c11', 
'C:\Program Files (x86)\Google\lib\protorpc-1.0', 
'C:\Program Files (x86)\Google\lib\webob-1.1.1', 
'C:\Program Files (x86)\Google\lib\yaml-3.10'

他们实际上在C:\Program Files (x86)\Google\google_appengine\lib

我不知道为什么我在尝试安装那个包之前没有出现这个问题,但这可能与a reported google issue有关。

更新:问题已在 SDK 1.9.40 版本中修复。

a GAE issue causing exactly this behaviour introduced in SDK version 1.9.37, see .

如果您的 SDK 版本是 1.9.37 或 1.9.38 降级到 1.9.36,您可以找到 here。至少在修复发布之前。

总结:

webapp2 和 jinja2 导入错误是由 sys.path 损坏引起的,这是版本 1.9.37 或 1.9.38 中存在的 GAE 缺陷的结果。它只会影响发展;部署的版本应该可以工作。它可以在升级或尝试安装其他项目后立即发生。

解决方案:

  • 将 AppEngineSDK 降级到 1.9.36 对我有用
  • GAE 缺陷将在 1.9.38 之后的某个时候修复。检查 Issue 12963 的状态。
  • Google issue 13084, another workaround is to manually patch sys.path in appengine_config.py. Docs here.