【问题标题】:dev_appserver.py says Unknown runtime 'python38'dev_appserver.py 说未知运行时'python38'
【发布时间】:2021-01-12 17:59:49
【问题描述】:

我正在尝试将几个 python 项目的 GAE 运行时从 python37 升级到 python38。 在我们部署之前,我已经使用 dev_appserver.py 在本地测试了应用程序,但是在将运行时更改为 python38 后出现了未知的运行时错误。根据appengine docs,Python 3.8 应该是受支持的运行时。

我还将所有 gcloud cli 组件更新到了最新版本。这只是被更改/弃用的东西,我只是不知道吗?还是它实际上是 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'.

【问题讨论】:

  • gcloud components udpate?
  • 我已经将我所有的 gcloud 组件更新到最新版本,但我仍然收到同样的错误,并且支持的运行时列表仍然缺少 python38。
  • 不是答案,但可能是一种解决方法。我停止使用dev_appserver.py。相反,我使用gcloud beta emulators datastore start 运行数据存储模拟器,然后使用python main.py 运行我的应用程序。
  • 感谢@gaefan,但我真的不想将 app.yaml 中的所有处理程序重写到我的 python 应用程序中。

标签: python google-app-engine google-cloud-platform python-3.8


【解决方案1】:

更新:也适用于 python39 运行时!


我找到了一个解决办法!

我找到并编辑了位于 gcloud devappserver2 工具目录中的 runtime_factories.py 文件。在我的 Ubuntu 18.04 安装中,它位于此处:

/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/runtime_factories.py

我将python38 添加到MODERN_RUNTIMESFACTORIES,如下所示:

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 上更新此工具,这样其他人就不必这样做了! ?

【讨论】:

  • Google 在维护 Python 2 的 GAE 方面做得很糟糕(是的,我知道它已被弃用,但它仍然需要工作)和 dev_appserver.py。 :( 迁移到 Python 3 本身就很痛苦,但使用半损坏的工具则是一场噩梦。
  • 感谢您打开这个问题!这实在是太愚蠢了。谷歌似乎没有足够的资源在他们的脚本中插入两行来强制使用更新的 Python 运行时。 cloud.google.com/appengine/docs/standard/python3/runtime 声明 Python3.9 支持也已经可用。我现在修复了你的问题,并将一个 Python3.9 配置的应用程序部署到应用程序引擎,它工作得很好。
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多