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')

免责声明:文章转载自《Python,environ解惑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Linux最常见的十大问题Python模块struct 数据格式转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pyes-elasticsearch的python客户端使用笔记

elasticsearch入门: http://www.qwolf.com/?p=1387 一.重要的概念 http://834945712.iteye.com/blog/1915432这篇文章很多类比做的很好,便于快速理解pyes的结构 http://blog.plotcup.com/a/106 很清晰的示例代码 1. 使用pip install pye...

Django知识总结(一)

壹 ● 有关http协议 一 ● 全称 超文本传输协议(HyperText Transfer Protocol) 二 ● 协议 双方遵循的规范 http协议是属于应用层的协议(还有ftp, smtp等), 即浏览器请求消息和服务器响应消息的一系列规则 三 ● http协议的特性 http是无状态、无连接的协议(stateless, c...

Python操作Access数据库基本操作步骤分析

Python编程语言的出现,带给开发人员非常大的好处。我们可以利用这样一款功能强大的面向对象开源语言来轻松的实现许多特定功能需求。比如Python操作Access数据库的功能实现等等。在Python操作Access数据库之前,首先,你应安装了Python和Python for Windows extensions(pywin32-216.win32-py2...

树莓派3b的raspberrypi系统安装pip

上节将python的默认版本更改为python3了,我们可以直接使用python命令,该命令就是使用的python3 我们想要通过pip命令安装python扩展包,先安装pip,apt install没用,通过源码安装 去PyPI · The Python Package Index查找源码包,首先安装setuptools,再安装pip pi@raspb...

比较全面的python类型转换

 前言提示: int(整形):a=1 str(字符串):a="asdsdf地方123" float(浮点):a="3.14150" bytes(字节包):a=b'xe2x82xac20' complex(复数):a=(34567+0j) list(列表):a=[1, 2, 3, '4', '五', 'liu'] set(集合):a={1,2,2,3,"4"...

1-多线程与多进程

  一 进程与线程的概念 1.1 进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源。你是不是已经想到在程序A读取数据的过程中,让程序B去...