Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用环境变量覆盖python配置_Python_Python 3.x_Configuration_Environment Variables - Fatal编程技术网

如何使用环境变量覆盖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')

存在,但我正在寻找内置解决方案。

我不知道有任何内置解决方案可以用环境变量覆盖选项,但您可能可以制定一些命名约定,使其非常简单

我通常有三个地方可以更改程序中的设置:

  • 源代码持有对大多数开发人员都有意义的通用默认值,但默认情况下应该是安全的安全设置除外
  • 环境变量可以覆盖源代码默认值
  • 命令行参数可以覆盖环境变量。请注意不要将密码和其他敏感数据放在命令行上,因为同一系统上的其他用户通常可以看到进程命令行
  • 听起来您想在级别1和级别2之间引入另一个配置文件

    我的代码通常是这样的:

    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)
    

    我不知道有什么内置的解决方案可以用环境变量覆盖选项,但您可能可以制定一些命名约定,使其变得非常简单

    我通常有三个地方可以更改程序中的设置:

  • 源代码持有对大多数开发人员都有意义的通用默认值,但默认情况下应该是安全的安全设置除外
  • 环境变量可以覆盖源代码默认值
  • 命令行参数可以覆盖环境变量。请注意不要将密码和其他敏感数据放在命令行上,因为同一系统上的其他用户通常可以看到进程命令行
  • 听起来您想在级别1和级别2之间引入另一个配置文件

    我的代码通常是这样的:

    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)