Google App Engine dev_appserver.py:watcher_ignore_re 标志“不可 JSON 序列化”

spe*_*ane 3 python google-app-engine development-environment

为什么我使用该dev_appserver.py选项运行时watcher_ignore_re,我收到一条错误消息,指出正则表达式is not JSON serializable.

这是开发服务器的错误吗?我这个命令使用不当吗?命令和调用堆栈打印如下。

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
Run Code Online (Sandbox Code Playgroud)

akw*_*bb1 5

看起来这是 dev_appserver2 中内置的 google 分析代码的问题(google-cloud-sdk\platform\google_appengine\google\appengine\tools\devappserver2\devappserver2.py 在第 316 行或附近)。它想要将所有命令行选项发送到谷歌分析。如果您通过添加命令行选项 --google_analytics_client_id= 来删除分析客户端 ID(注意:'=' 没有任何后续值),则应用程序服务器将不会调用 Google 分析代码,因为它会尝试以 JSON 序列化 SRE 对象并失败。然而,由于您使用的是 Windows,我发现 --watcher_ignore_re 无论如何都不起作用,即使您解决了这个问题。

file_watcher.py中有一条注释

TODO:b/33178251 - 添加对 Windows 的 watcher_ignore_re 支持。