Python 2 不再受社区支持。我们建议您将 Python 2 应用迁移到 Python 3

Python 2 模块配置

appengine_config.py 文件是一个配置文件,可让您指定库的安装文件夹,以及为 google.appengine 软件包中的某些 Python 模块的常量和“钩子函数”提供您自己的值。如果您指定自己的值,则可以根据应用的需要更改相关 App Engine 服务的默认行为。您可以定义此文件和 app.yaml 配置文件,并将其与应用的其余代码一起部署。

使用 appengine_config.py 配置 Python 模块

App Engine 中的一些 Python 模块可以使用 appengine_config.py 进行配置。

要自定义服务的 Python 模块,您可以在该服务的根目录中创建一个新的 appengine_config.py 文件。要使用此文件,您只需定义您想要替换的常量或钩子函数。然后,从 app.yaml 文件所在的目录运行 gcloud app deploy,以重新部署应用以及新的 appengine_config.py 文件。您定义的常量和钩子函数随后将供这些 App Engine 服务在内部使用。

要替换常量,请在常量名称前加上 Python 模块名称和下划线,然后为其分配一个值。例如,要修改 AppStats 中的替换值,您可以定义 KEY_PREFIX 的值:

appstats_KEY_PREFIX = '__my_custom_prefix__'

所替换钩子函数的命名方式类似于其他 Python 模块中的函数。例如,在 namespace_manager 中,您可以按如下方式替换 appengine_config.py 中的钩子函数 default_namespace_for_request

import os
def namespace_manager_default_namespace_for_request():
    return os.environ.get('HTTP_HOST', '')

App Engine 中的可配置 Python 模块

下面列出的 Python 模块可以使用 appengine_config.py 进行配置。按照惯例,钩子函数使用小写字母,而常量使用大写字母:

namespace_manager
  • default_namespace_for_request()(默认返回 None

AppStats

datastore_admin

  • BASE_PATH(默认值为 '/_ah/datastore_admin'
  • MAPREDUCE_PATH(默认值为 '/_ah/mapreduce'
  • CLEANUP_MAPREDUCE_STATE(默认值为 True

remoteapi

使用 lib_config 配置您自己的 Python 模块

App Engine 还允许您使用 appengine_config.py 中定义的常量和钩子函数来配置您自己的 Python 模块。lib_config.register() 函数允许您注册用户可替换的常量和钩子函数的名称,并定义合理的默认值,这样,当用户不希望进行替换时,就可以使用这些值。在内部,lib_config.register() 会尝试导入 appengine_config。如果导入成功,则会将指定的 Python 模块的默认值替换为 appengine_config.py 中定义的那些值。

my_module.py 中的示例用法:

from google.appengine.api import lib_config

def _hook_function1_default():
   return 'baz'

_config = lib_config.register('my_module', {'CONSTANT1': 'foo',
                                            'CONSTANT2': 'bar',
                                            'hook_function1': _hook_function1_default})

现在,您可以通过以下方式访问用户的常量:

_config.CONSTANT1
_config.CONSTANT2

以及通过以下方式调用其钩子函数:

_config.hook_function1()

一些程序员喜欢将这些默认值分组到一个类中:

class _ConfigDefaults(object):
  CONSTANT1 = 'foo'
  CONSTANT2 = 'bar'
  def hook_function1():
      return 'baz'

_config = lib_config.register('my_module',  _ConfigDefaults.__dict__)

用户可以在 appengine_config.py 中进行定义以替换默认值:

my_module_CONSTANT1 = 'foofoo'
my_module_hook_function1 = lambda: 'bazbaz'

因此,在 my_module.py 中,实际情形如下:

  • _config.CONSTANT1 现为 'foofoo'
  • _config.CONSTANT2 仍然为 'bar'
  • _config.hook_function1() 返回 'bazbaz'

lib_config.register() 返回后,用户替换值可立即供 my_module.py 使用。