我正在Windows 10上用Python开发一个用于Google App Engine的Web应用程序。当我的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
我不记得我尝试过的一切,但这就是我所知道的:
c:\python27\lib\site-packages
中看到了它。PYTHONPATH=C:\python27;c:\python27\lib;C:\Python27\DLLS
。sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
,但它没有帮助。 我认为这是我开始收到jinja2导入错误的时候。所以我从main.py中删除了该语句。仍然得到jinja2导入错误。我试过pip uninstall GoogleAppEngineCloudStorageClient
但它说它没有安装,所以我尝试删除lib目录。仍然得到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有关。
答案 0 :(得分:2)
更新:此问题已在SDK版本1.9.40中修复。
a GAE issue导致SDK版本1.9.37中引入此行为,请参阅"ImportError: No module named webapp2" after Linux SDK upgrade (1.9.35 -> 1.9.38)。
如果您的SDK版本是1.9.37或1.9.38降级到1.9.36,您可以找到here。至少在解决方案发布之前。
答案 1 :(得分:0)
要点:
webapp2和jinja2导入错误是由sys.path损坏引起的,这是版本1.9.37或1.9.38中存在GAE缺陷的结果。它只影响发展;部署版本应该工作。它可以在升级后或尝试安装其他项目后立即发生。
解决方案: