#python #google-app-engine #google-cloud-platform #python-3.8
# #python #google-app-engine #google-облачная платформа #python-3.8
Вопрос:
Я пытаюсь обновить среду выполнения GAE в нескольких проектах python с python37 до python38. Я использовал dev_appserver.py чтобы протестировать приложения локально перед развертыванием, но я получаю неизвестную ошибку времени выполнения после изменения среды выполнения на python38. Python 3.8 должен быть поддерживаемой средой выполнения в соответствии с документами appengine.
Я также обновил все компоненты командной строки gcloud до последней версии. Это просто что-то, что было изменено / устарело, и я просто не знаю об этом? или это на самом деле ошибка и отсутствует в dev_appserver.py
инструменте?
Любая помощь будет оценена! 🙂
RuntimeError: Unknown runtime 'python38'; supported runtimes are 'custom', 'go', 'go111', 'java', 'java7', 'java8', 'php55', 'php72', 'python', 'python-compat',
'python27', 'python37'.
Полная трассировка:
Traceback (most recent call last):
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 96, in <module>
_run_file(__file__, globals())
File "/mnt/c/Users/Admin/AppData/Local/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 "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 613, in <module>
main()
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 601, in main
dev_server.start(options)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 373, in start
options.api_host, apiserver.port, wsgi_request_info_)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 259, in start
ssl_port)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 396, in _create_module
ssl_port=ssl_port)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 1313,
in __init__
super(AutoScalingModule, self).__init__(**kwargs)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 599, in __init__
self._module_configuration)
File "/mnt/c/Users/Admin/AppData/Local/Google/Cloud SDK/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 226, in _create_instance_factory
sorted(repr(k) for k in runtime_factories.FACTORIES))))
RuntimeError: Unknown runtime 'python38'; supported runtimes are 'custom', 'go', 'go111', 'java', 'java7', 'java8', 'php55', 'php72', 'python', 'python-compat',
'python27', 'python37'.
Комментарии:
1.
gcloud components udpate
?2. Я уже обновил все свои компоненты gcloud до последних версий, но я по-прежнему получаю ту же ошибку, и в списке поддерживаемых сред выполнения по-прежнему отсутствует python38.
3. Не ответ, но, возможно, обходной путь. Я перестал использовать
dev_appserver.py
. Вместо этого я запускаю эмулятор хранилищаgcloud beta emulators datastore start
данных, а затем запускаю свое приложениеpython main.py
.4. Спасибо @gaefan, но я действительно не хотел переписывать все обработчики из app.yaml в мое приложение на python.
Ответ №1:
ОБНОВЛЕНИЕ: работает и со средой выполнения python39!
Я НАШЕЛ ХИТРЫЙ ОБХОДНОЙ ПУТЬ!
Я нашел и отредактировал runtime_factories.py файл, расположенный в каталоге инструментов gcloud devappserver2. В моей установке Ubuntu 18.04 он был расположен здесь:
/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/runtime_factories.py
Я добавил python38
к обоим MODERN_RUNTIMES
и FACTORIES
вот так:
MODERN_RUNTIMES = set(['python38', 'python37', 'go111'])
FACTORIES = {
'go': go_factory.GoRuntimeInstanceFactory,
'go111': go_factory.GoRuntimeInstanceFactory,
'php55': php_factory.PHPRuntimeInstanceFactory,
'php72': php_factory.PHPRuntimeInstanceFactory,
'python': python_factory.PythonRuntimeInstanceFactory,
'python38': python_factory.PythonRuntimeInstanceFactory,
'python37': python_factory.PythonRuntimeInstanceFactory,
'python27': python_factory.PythonRuntimeInstanceFactory,
'python-compat': python_factory.PythonRuntimeInstanceFactory,
'custom': custom_factory.CustomRuntimeInstanceFactory,
}
Затем нажмите сохранить и запустил dev_appserver.py снова, и ЭТО СРАБОТАЛО! Я также подтвердил, что на самом деле работает среда выполнения python38!
Это означает, что dev_appserver.py список поддерживаемых сред выполнения инструмента еще не обновлен последними средами выполнения python
… Google, если вы видите это, пожалуйста, обновите этот инструмент, чтобы другим не приходилось выполнять это хакерское обходное решение! 🙏
Комментарии:
1. Google делает дерьмовую работу по поддержанию GAE для Python 2 (да, я знаю, что он устарел, но он все еще должен работать) и dev_appserver.py . 🙁 Переход на Python 3 сам по себе болезнен, но с полуразрушенными инструментами это кошмар.
2. Спасибо, что открыли эту проблему! Это действительно абсолютно глупо. Похоже, что у Google недостаточно ресурсов для вставки двух строк в свои скрипты для принудительного использования новых сред выполнения Python. cloud.google.com/appengine/docs/standard/python3/runtime заявляет, что поддержка Python3.9 также уже доступна. Теперь я внес ваше исправление и развернул настроенное на Python3.9 приложение в app Engine, там оно работает просто отлично.