Google App Engine dev_appserver.py: флаг watcher_ignore_re "не поддерживает сериализацию JSON"

Почему я запускаю 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

FWIW, передача того же аргумента --watcher_ignore_re = "(.*\.git|.*\.idea|tmp\.py)" в Linux работает нормально. Возможно, проблема связана с Windows. Проверьте свои расценки, если вы еще этого не сделали. Удалите или измените свои аргументы, в том числе watcher_ignore_re, чтобы увидеть, выделяете ли вы, какой именно аргумент вызывает разочарование.

Dan Cornilescu 06.06.2018 19:41

@DanCornilescu, не могли бы вы расширить то, что вы объясняете в своем комментарии, и опубликовать его в качестве ответа? Спасибо.

Rodrigo C. 08.06.2018 13:48

То же самое происходит со мной для `--watcher_ignore_re '. * / Frontend /.*' 'на Mac. SDK версии 204.0.0. Это новая проблема, она отлично работала, когда я использовал предыдущую версию SDK.

Kostub Deshmukh 12.06.2018 22:34

Я вернулся к SDK версии 200.0.0, и проблема исправлена.

Kostub Deshmukh 21.06.2018 00:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
4
551
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, это проблема с кодом Google Analytics, встроенным в dev_appserver2 (google-cloud-sdk \ platform \ google_appengine \ google \ appengine \ tools \ devappserver2 \ devappserver2.py в строке 316 или около нее). Он хочет отправить все ваши параметры командной строки в Google Analytics. Если вы удалите идентификатор клиента аналитики, добавив параметр командной строки --google_analytics_client_id = (примечание: '=' без какого-либо следующего значения), сервер приложений не будет вызывать код аналитики Google, в котором он пытается сериализовать JSON-объект SRE и не работает . Однако, поскольку вы работаете в Windows, я обнаружил, что --watcher_ignore_re все равно не работает, даже если вы справитесь с этой проблемой.

Есть комментарий в file_watcher.py

ЗАДАЧА: b / 33178251 - Добавить поддержку watcher_ignore_re для Windows.

Ответ принят как подходящий

Я также столкнулся с этой проблемой юзабилити в Windows и был очень разочарован. Я пытался найти обходные пути, но не нашел подходящего.

В итоге я решил сделать свою реализацию поддержки watcher_ignore_re для Windows. Я внес необходимые изменения в мое репозиторий Github

Если описать их в нескольких словах:

  1. Добавить свойства _watcher_ignore_re, _skip_files_re и их установщики
  2. Добавьте оператор импорта from google.appengine.tools.devappserver2 import watcher_common и используйте его во вновь созданном def _path_ginored
  3. Отфильтруйте additional_changes перед добавлением их в измененные файлы наблюдателя

Для решения упомянутой проблемы с несериализуемым атрибутом регулярного выражения мы должны удалить их из сериализованного словаря. Исправление для этого добавляется как последующая фиксация и может быть проверено на metrics.py:185-193.

Надеюсь, это поможет другим ребятам получить удовольствие от разработки GAE в Windows :)

Другие вопросы по теме