• Python,environ解惑


    最近又遇到了对环境变量读取的问题,以前的学习很快会忘记~
    还是写篇博客稍微记录下比较好

    首先我们都应该知道在平常的开发中我们经常会配置一些系统环境变量
    不论是windows系统或者是linux系统,比如:

    # Windows
    set test=123
    # Linux
    export test=123
    

    再而我们在进行web开发的时候也会遇到各种,变量的控制
    比如导入开发(default)和生产环境(prod)不同的环境变量

    DEBUG=True
    SECRET_KEY='abcddddd'
    ALLOWED_HOSTS='*'
    MAIL_USERNAME=xxxx@xx.com
    MAIL_PASSWORD=abcdefg
    

    这里记录一下开发时经常用到的方法。

    直接export/set

    即在我们运行我们项目之前,直接利用export的方式导入我们需要的环境变量
    然后在项目中使用os导入

    # shell命令行
    export test=123 # **注意这里没有空格**
    
    # 项目中
    import os
    os.environ.get('test')
    

    以下的各种方式也是间接利用了export或者类似思想

    python-dotenv

    python-dotenv github

    从.env文件中读取键值对,并将它们添加到环境变量中

    pip install -U python-dotenv # 安装
    env.dotenv_path = '/opt/myapp/.env' # 指定文件
    

    官方示例:
    iDIMin.md.png

    environs

    environs github

    官方示例:
    iDIBz6.md.png

    docker-compose指定

    env_file: .env
    
    env_file:
      - .env
    

    在应用启动之前自动读取

    if os.path.exists('.env'):
        print('Importing environment from .env...')
    for line in open('.env'):
        var = line.strip().split('=')
        if len(var) == 2:
            key, value = var[0].strip(), var[1].strip()
            os.environ[key] = value
    

    关于区分不同环境

    参考自:https://blog.csdn.net/u010180339/article/details/78682575
    web开发的时候难免会有不同的环境变量,只要是可以指定文件目录的都可以使用这种方式
    以environs为例

    env = environ.Env()
    env.read_env('envs/.env.%s'%(env.str('PROJECT_ENV','prod')))
    

    然后在启动web应用的时候,我们指定相应的环境类型就行了
    非常方便

    PROJECT_ENV=dev python manage.py runserver
    

    PS:当然这些库也很多自己基本的方法,可以 进入官网探索下
    比如environs对不同类型可以指定

    SECRET_KEY = env.str('SECRET_KEY')
    DEBUG = env.bool('DEBUG', False)
    ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
    
  • 相关阅读:
    【软剑攻城队】团队介绍发布!
    【软剑攻城队】团队简介
    耿丹计科16-1大家庭
    便捷从使用git开始
    交流从选择coding.net开始
    相识从C语言开始
    川师2016上半年软件工程助教总结
    2016年川师大软件工程本科生博客地址列表
    川师大研究生2015级现代软件工程(2016春)
    SVN:Cleanup failed to process the following paths
  • 原文地址:https://www.cnblogs.com/bay1/p/10982310.html
Copyright © 2020-2023  润新知