Python 金字塔:将杂项配置发送到应用程序工厂

Python 金字塔:将杂项配置发送到应用程序工厂,python,configuration-files,pyramid,Python,Configuration Files,Pyramid,我已按如下方式设置金字塔配置文件: [app:main] ... [server:main] ... [memcache] # memcache config [zeromq] # zeromq xonfig 现在在我的app\u工厂中,我想获得所有配置——不仅是app:main部分,还有memcache、zeromq和其他可能的部分 我该怎么做呢 我之所以将配置分为不同的部分,是因为我的应用程序使用了许多不同的服务,我不想将所有配置拼凑到app:main部分 一种方法是通过读取配置文

我已按如下方式设置金字塔配置文件:

[app:main]
...

[server:main]
...


[memcache]
# memcache config

[zeromq]
# zeromq xonfig
现在在我的
app\u工厂
中,我想获得所有配置——不仅是
app:main
部分,还有
memcache
zeromq
和其他可能的部分

我该怎么做呢

我之所以将配置分为不同的部分,是因为我的应用程序使用了许多不同的服务,我不想将所有配置拼凑到
app:main
部分

一种方法是通过读取配置文件手动将配置拉入应用程序。然后你必须知道应用程序运行的模式(开发或生产)。此外,还存在多次解析配置的开销(因为粘贴部署将首先进行)


有更好更优雅的解决方案吗?

不幸的是,如果要采用这种方法,您必须再次解析配置文件。您可以通过
main
中的
config\u file=global\u config[''文件\uuuuuuu']
获取文件,并使用stdlib
ConfigParser
自行解析

如果您喜欢这种独立部分的INI格式,Mozilla服务有一个很好的小模块,您可以使用它来处理所有这些。它进行值转换(尝试将值转换为整数或布尔值)。它支持使用其他部分扩展配置,例如
[foo:bar]key=value
,解析后将返回一个包含
设置['foo.bar.key']==value
的简单字典。它还可以方便地为您解析对象,这样您的主对象就可以如下所示:

def main(global_config, **settings):
    config = get_configurator(global_config, **settings)
    settings = config.registry.settings
    # ... do your app configuration
    return config.make_wsgi_app()

您可以将特定于应用程序的配置传递到ini文件中:

[app:xyz]
    something = True
然后在
main
功能(应用程序工厂)中,您可以通过以下方式访问它:

settings['something']
更多信息:


我不知道答案,但我通常会把所有内容都放在
[app:main]
中,但我会用点来命名名称空间。像
service1.url
service2.url
,我也这样做。例如:google.analytics.id在stdlib中有一个python配置解析器,当然不需要Mozilla,但是您忽略了他们的解析器的功能(使用配置解析器)。我会更新我的答案来解释。你的问题不是特别说你不想将所有设置“拼凑”到
[app:main]
部分吗?哦,好吧。@MichaelMerickel,但这不是
[app:main]
部分。我把配置放在
[app:xyz]
部分下面,在您的工作解决方案中我遗漏了什么?您的
main()
将仅具有调用
main()
[app:…]
部分中的可用设置。它无法看到其他
[app:…]
部分。加载的节取决于
pserve
的选项(默认为main,但可以在CLI上覆盖)。@MichaelMerckel您是说
main()
将无法访问
[app:xyz]
节下的配置吗?