我尝试通过appcfg.py更新Google App Engine上的项目:
C:\> "C:\Program Files (x86)\Google\google_appengine\appcfg.py" update c:\secondApp
但我立即收到以下错误(顶行被忽略):
File "C:\Python27\lib\urllib2.py", line 1240, in https_open
context=self._context)
TypeError: do_open() got an unexpected keyword argument 'context'
我决定深入研究文件urllib2.py
并找到问题所在。在几分钟的代码审查之后,我得出这样的结论:接受名为context
的参数的重载不存在。所以,我更改了原始代码段:
def https_open(self, req):
return self.do_open(httplib.HTTPSConnection, req,
context=self._context)
到
def https_open(self, req):
return self.do_open(httplib.HTTPSConnection, req)
和瞧!它有效(虽然出现了关于身份验证的另一个问题,但第一个问题得到了解决)。但是很奇怪,在正式版本中存在这样的错误,而很可能其他人遇到了同样的问题。令人惊讶的是,我无法找到其他人报告的这个问题!
模块有什么问题吗?我是否混合了错误版本的已安装软件包?有什么帮助吗?
我的Google App Engine SDK版本:1.9.17 x64
我安装的Python版本:2.7.9 x64
我的平台:Windows 8.1 x64
我不熟悉Python:D
解决方案:
正如Migel Tissera所说,问题在于身份验证。但我尝试了他提出的命令并得到了同样的错误。幸运的是,我执行了以下命令并取得了成功! (我添加了--noauth_local_webserver和--no_cookies切换):
appcfg.py --noauth_local_webserver --oauth2 --skip_sdk_update_check --no_cookies update c:\secondApp
答案 0 :(得分:26)
我在半小时前遇到了同样的问题..它实际上与urllib2文件无关,它与身份验证有关。这为我修好了..
将 appcfg.py 与 - oauth2 标志一起使用。试试这个, appcfg.py --oauth2 update / path / to / your / app 。在您第一次看到浏览器窗口时,您需要允许其访问您的帐户。然后,您可以在不输入电子邮件和密码的情况下部署应用程序。
我希望这会有所帮助。很高兴在这里发布我的第一个答案! :)
谢谢, Migel
答案 1 :(得分:-1)
使用不兼容的Appengine SDK版本时也可能出现此错误。
在我的情况下,升级SDK会修复它。