Python 谷歌应用程序引擎dev_appserver.py:watcher_ignore_re flag";不是JSON可序列化的“;
为什么我使用选项Python 谷歌应用程序引擎dev_appserver.py:watcher_ignore_re flag";不是JSON可序列化的“;,python,google-app-engine,development-environment,Python,Google App Engine,Development Environment,为什么我使用选项watcher\u ignore\u re运行dev\u appserver.py,我会收到一条错误消息,即正则表达式不可JSON序列化 这是开发服务器的一个bug吗?我是否不正确地使用此命令?下面打印了命令和调用堆栈 C:\Users\mes65\Documents\MyProject>"C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" ^ --watche
watcher\u ignore\u re
运行dev\u appserver.py
,我会收到一条错误消息,即正则表达式不可JSON序列化
这是开发服务器的一个bug吗?我是否不正确地使用此命令?下面打印了命令和调用堆栈
C:\Users\mes65\Documents\MyProject>"C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py" ^
--watcher_ignore_re="(.*\.git|.*\.idea|tmp\.py)" ^
"C:\Users\mes65\Documents\MyProject"
WARNING 2018-06-06 09:28:59,161 appinfo.py:1622] lxml version "2.3" is deprecated, use one of: "3.7.3"
INFO 2018-06-06 09:28:59,187 devappserver2.py:120] Skipping SDK update check.
Traceback (most recent call last):
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 96, in <module>
_run_file(__file__, globals())
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\dev_appserver.py", line 90, in _run_file
execfile(_PATHS.script_file(script_name), globals_)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 454, in <module>
main()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 442, in main
dev_server.start(options)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py", line 163, in start
bool(ssl_certificate_paths), options)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\metrics.py", line 166, in Start
self._cmd_args = json.dumps(vars(cmd_args)) if cmd_args else None
File "C:\Python27\lib\json\__init__.py", line 244, in dumps
return _default_encoder.encode(obj)
File "C:\Python27\lib\json\encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Python27\lib\json\encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "C:\Python27\lib\json\encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <_sre.SRE_Pattern object at 0x00000000063C2188> is not JSON serializable
C:\Users\mes65\Documents\MyProject>“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\bin\dev\u appserver.py”^
--watcher_ignore_re=“(.*\.git.*\.idea|tmp\.py)”^
“C:\Users\mes65\Documents\MyProject”
警告2018-06-06 09:28:59161 appinfo.py:1622]lxml版本“2.3”已被弃用,请使用以下选项之一:“3.7.3”
信息2018-06-06 09:28:59187 devappserver2.py:120]正在跳过SDK更新检查。
回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\dev\u appserver.py”,第96行,在
_运行\u文件(\uuuu文件,globals())
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\dev\u appserver.py”,第90行,在运行文件中
execfile(_PATHS.script_文件(script_名称),全局文件)
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\Google\appengine\tools\devappserver2\devappserver2.py”,第454行,在
main()
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\Google\appengine\tools\devappserver2\devappserver2.py”,主目录第442行
dev_server.start(选项)
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\Google\appengine\tools\devappserver2\devappserver2.py”,第163行,在开始处
bool(ssl证书路径),选项)
文件“C:\Program Files(x86)\Google\Cloud SDK\Google Cloud SDK\platform\Google\u appengine\Google\appengine\tools\devappserver2\metrics.py”,第166行,在开始处
self._cmd_args=json.dumps(vars(cmd_args))如果cmd_args没有其他值
文件“C:\Python27\lib\json\\uuuu init\uuuu.py”,第244行,转储
返回默认编码器编码(obj)
文件“C:\Python27\lib\json\encoder.py”,第207行,在encode中
chunks=self.iterencode(o,\u one\u shot=True)
文件“C:\Python27\lib\json\encoder.py”,第270行,在iterencode中
返回_iterencode(o,0)
默认情况下,文件“C:\Python27\lib\json\encoder.py”,第184行
raise TypeError(repr(o)+“不可JSON序列化”)
TypeError:不可序列化JSON
这似乎是dev_appserver2内置的谷歌分析代码的问题(第316行或周围的谷歌云sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py)。它希望将您的所有命令行选项发送到google analytics。如果通过添加命令行选项删除分析客户端id--google_analytics_client_id=(注意:“=”没有任何以下值),appserver将不会调用google analytics代码,因为它正在尝试对SRE对象进行JSON序列化,但失败了。但是,由于您使用的是Windows,我发现--watcher\u ignore\u re即使在您解决了这个问题后也无法工作
文件_watcher.py中有一条注释
TODO:b/33178251-添加对windows的监视者忽略支持。我在windows上也遇到了这个可用性问题,真的很失望。我试图找到一些变通办法,但没有找到任何合适的办法
最后,我决定自己为Windows实现support watcher\u ignore\u re。我把所需的更改放在
如果用几个词来描述它们:
添加\u watcher\u ignore\u re
,\u skip\u files\u re
属性及其设置程序
从google.appengine.tools.devappserver2 import watcher\u common中添加导入语句,并在新创建的def\u路径中使用它
在将附加更改添加到观察者更改的文件之前,过滤附加更改
为了解决上述不可序列化regex属性的问题,我们应该将它们从序列化字典中删除。对此的修复将作为后续提交添加,并可在metrics.py:185-193
中检查
我希望它能帮助其他人享受在Windows上开发GAE的乐趣:)FWIW,在linux上传递相同的--watcher|u ignore_re=“(.*.git|.*.idea | tmp\.py)”
参数就可以了。可能是windows特定的问题。如果您还没有这样做,请检查您的报价。删除或修改您的arg,包括watcher\u ignore\u re
,看看您是否能找出哪一个arg片段恰恰是令人不快的一个。@DanCornilescu,请您详细解释一下您在评论中解释的内容,并将其作为答案发布?谢谢。同样的事情也发生在我身上,比如Mac上的“--watcher\u ignore.*/frontend/*.”。SDK版本204.0.0。这是一个新问题,在我使用以前版本的SDK时,它工作正常。我恢复到SDK版本200.0.0,该问题已得到修复。