使用appcfg.py时出现意外的关键字参数“context”

时间:2014-12-13 21:25:39

标签: python google-app-engine

我尝试通过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

2 个答案:

答案 0 :(得分:26)

我在半小时前遇到了同样的问题..它实际上与urllib2文件无关,它与身份验证有关。这为我修好了..

appcfg.py - oauth2 标志一起使用。试试这个, appcfg.py --oauth2 update / path / to / your / app 。在您第一次看到浏览器窗口时,您需要允许其访问您的帐户。然后,您可以在不输入电子邮件和密码的情况下部署应用程序。

我希望这会有所帮助。很高兴在这里发布我的第一个答案! :)

谢谢, Migel

答案 1 :(得分:-1)

使用不兼容的Appengine SDK版本时也可能出现此错误。

在我的情况下,升级SDK会修复它。