如何使用环境变量覆盖python配置
我希望有一个带有一些默认值的配置文件,并且能够通过环境变量覆盖特定值。 我看到了各种项目配置示例,例如,但找不到答案。如何使用环境变量覆盖python配置,python,python-3.x,configuration,environment-variables,Python,Python 3.x,Configuration,Environment Variables,我希望有一个带有一些默认值的配置文件,并且能够通过环境变量覆盖特定值。 我看到了各种项目配置示例,例如,但找不到答案。 我知道如何手动操作,即检查 if os.getenv('my_var') 存在,但我正在寻找内置解决方案。我不知道有任何内置解决方案可以用环境变量覆盖选项,但您可能可以制定一些命名约定,使其非常简单 我通常有三个地方可以更改程序中的设置: 源代码持有对大多数开发人员都有意义的通用默认值,但默认情况下应该是安全的安全设置除外 环境变量可以覆盖源代码默认值 命令行参数可以覆盖环境
我知道如何手动操作,即检查
if os.getenv('my_var')
存在,但我正在寻找内置解决方案。我不知道有任何内置解决方案可以用环境变量覆盖选项,但您可能可以制定一些命名约定,使其非常简单 我通常有三个地方可以更改程序中的设置:
def parse_args(argv=None):
parser = ArgumentParser(description='What my program does...',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--server',
default=os.environ.get('MYAPP_SERVER', 'http://localhost:8000'),
help='server to send data to')
parser.add_argument(
'--user',
default=os.environ.get('MYAPP_USER', 'alex'),
help='user name for server')
parser.add_argument(
'--password',
default=SUPPRESS,
help='password for server (default not shown)')
args = parser.parse_args(argv)
if not hasattr(args, 'password'):
args.password = os.environ.get('MYAPP_PASSWORD', 'alex')
return args
如果要查看某个配置文件,它可能如下所示:
def parse_args(argv=None):
parser = ArgumentParser(description='What my program does...',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--server',
default=get_default('server', 'http://localhost:8000'),
help='server to send data to')
parser.add_argument(
'--user',
default=get_default('user', 'alex'),
help='user name for server')
parser.add_argument(
'--password',
default=SUPPRESS,
help='password for server (default not shown)')
args = parser.parse_args(argv)
if not hasattr(args, 'password'):
args.password = get_default('password', 'alex')
return args
def get_default(name, value):
file_value = read_config_file(name)
if file_value is not None:
value = file_value
return os.environ.get(f'MYAPP_{name.upper()}', value)
我不知道有什么内置的解决方案可以用环境变量覆盖选项,但您可能可以制定一些命名约定,使其变得非常简单 我通常有三个地方可以更改程序中的设置:
def parse_args(argv=None):
parser = ArgumentParser(description='What my program does...',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--server',
default=os.environ.get('MYAPP_SERVER', 'http://localhost:8000'),
help='server to send data to')
parser.add_argument(
'--user',
default=os.environ.get('MYAPP_USER', 'alex'),
help='user name for server')
parser.add_argument(
'--password',
default=SUPPRESS,
help='password for server (default not shown)')
args = parser.parse_args(argv)
if not hasattr(args, 'password'):
args.password = os.environ.get('MYAPP_PASSWORD', 'alex')
return args
如果要查看某个配置文件,它可能如下所示:
def parse_args(argv=None):
parser = ArgumentParser(description='What my program does...',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--server',
default=get_default('server', 'http://localhost:8000'),
help='server to send data to')
parser.add_argument(
'--user',
default=get_default('user', 'alex'),
help='user name for server')
parser.add_argument(
'--password',
default=SUPPRESS,
help='password for server (default not shown)')
args = parser.parse_args(argv)
if not hasattr(args, 'password'):
args.password = get_default('password', 'alex')
return args
def get_default(name, value):
file_value = read_config_file(name)
if file_value is not None:
value = file_value
return os.environ.get(f'MYAPP_{name.upper()}', value)