【问题标题】:Python Config Parser environment variablesPython 配置解析器环境变量
【发布时间】:2017-06-12 20:54:13
【问题描述】:

我正在尝试将一些环境变量读入我的 ConfigParser 文件中。

我指的是this answer,但我得到了

"InterpolationDepthError: Value interpolation too deeply recursive" error.
section: [amazon]
    option : amazon_access_key
    rawval : %(AMAZON_ACCESS_KEY)s

这是我的配置文件的一部分:

[amazon]
amazon_access_key=%(AMAZON_ACCESS_KEY)s
amazon_secret_key=%(AMAZON_SECRET_KEY)s

这就是我写的文件:

from ConfigParser import SafeConfigParser
import os

config = SafeConfigParser(os.environ)
config.read('config.txt')

当我在“amazon”部分直接调用这些变量时,我得到了上述错误。

当我在“默认”部分调用这些变量时,例如:

[default]
aws_access_key=%(AMAZON_ACCESS_KEY)s
aws_secret_key=%(AMAZON_SECRET_KEY)s

[amazon]
    amazon_access_key=%(aws_access_key)s
    amazon_secret_key=%(aws_secret_key)s

我收到以下错误:

ConfigParser.InterpolationMissingOptionError: Bad value substitution:
    section: [amazon]
    option : amazon_access_key
    key    : aws_access_key
    rawval : %(aws_access_key)s

我在这里错过了什么?

另外,我怎样才能为本地和生产部署提供单独的配置文件?目前,本地和生产环境的所有配置都是相同的。

【问题讨论】:

  • 您是否尝试过使用不影响原始键的环境变量名称?此外,您可能想查看[amazon] 部分下方的选项卡是否重要。
  • [amazon] 部分下没有标签。

标签: python environment-variables configparser


【解决方案1】:
from ConfigParser import SafeConfigParser
import ConfigParser
import os
class CaseConfigParser(SafeConfigParser):
     def optionxform(self, optionstr):
         return optionstr
config = CaseConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'amazon_access_key')

说明: 这里的问题在于 optionxform,它默认将所有选项都变为小写。最终,它的 key 和 value 将相等,类似于以下。

[amazon]
amazon_access_key=%(amazon_access_key)s

另一种解决方案是 - 将 config.txt 中的键名更改为不等于 env vars。

[amazon]
aak=%(AMAZON_ACCESS_KEY)s

然后

config = SafeConfigParser(os.environ)
config.read('config.ini')
print config.get('amazon', 'aak')

【讨论】:

  • 那么,如果我更改密钥的名称,这仍然有效吗?在这种情况下,我不必创建另一个类。我想避免这种情况,因为我必须在多个其他文件中调用此配置文件。
  • 可能是猴子补丁SafeConfigParser.optionxform = lambda self, st: st
  • 我已接受此答案,但由于我的声誉较低,因此未显示在计数中。
【解决方案2】:

你应该记住默认部分应该大写。

[DEFAULT]

进行此更改应该可以解决问题。

【讨论】:

  • 更改为 [DEFAULT] 没有帮助。我仍然收到 InterpolationMissingOptionError
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多