Loading

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')
posted @ 2018-10-22 17:02  bay1  阅读(2018)  评论(0编辑  收藏  举报