Python 使用 environs 库定义环境变量的方法
作者:崔庆才 发布时间:2022-06-06 08:58:51
Environs是解析环境变量的Python库。它的开发受envparse启发,底层使用marshmallow验证并序列化值。
在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环境,或者在某些设置里面可能还需要设置一些变量开关,如设置调试开关、日志开关、功能开关等等。
这些变量其实就是在项目运行时我们给项目设置的一些参数。这些参数一般情况来说,可以有两种设置方法,一种是通过命令行参数,一种是通过环境变量。二者的适用范围不同,在不同的场景下我们可以选用更方便的方式来实现参数的设置。
本节我们以 Python 项目为例,说说环境变量的设置。
设置和获取环境变量
首先,我们先来了解一下在 Python 项目里面怎样设置和获取变量。
首先让我们定义一个最简单的 Python 文件,命名为 main.py,内容如下:
import os
print(os.environ['VAR1'])
在这里我们导入了 os 模块,它的 environ 对象里面就包含了当前运行状态下的所有环境变量,它其实是一个 os._Environ 对象,我们可以通过类似字典取值的方式从中获取里面包含的环境变量的值,如代码所示。
好,接下来我们什么也不设置,直接运行,看下结果:
python3 main.py
结果如下:
raise KeyError(key) from None
KeyError: 'VAR1'
直接抛出来了一个错误,这很正常,我们此时并没有设置 VAR1 这个环境变量,当然会抛出键值异常的错误了。
接下来我们在命令行下进行设置,运行如下命令:
VAR1=germey python3 main.py
运行结果如下:
germey
可以看到我们在运行之前,在命令行之前通过键值对的形式对环境变量进行设置,程序就可以获取到 VAR1 这个值了,成功打印出来了 germey。
但这个环境变量是永久的吗?我们这次再运行一遍原来的命令:
python3 main.py
结果如下:
raise KeyError(key) from None
KeyError: 'VAR1'
嗯,又抛错了。
这说明了什么,在命令行的前面加上的这个环境变量声明只能对当前执行的命令生效。
好,那既然如此,我难道每次运行都要在命令行前面加上这些声明吗?那岂不麻烦死了。
当然有解决方法,我们使用 export 就可以了。
比如这里,我们执行如下命令:
export VAR1=germey
执行完这个命令之后,当前运行环境下 VAR1 就被设置成功了,下面我们运行的命令都能获取到 VAR1 这个环境变量了。
下面来试试,还是执行原来的命令:
python3 main.py
结果如下:
germey
可以,成功获取到了 VAR1 这个变量,后面我们运行的每一个命令就都会生效了。
但等一下,这个用了 export 就是永久生效了吗?
其实并不是,其实这个 export 只对当前的命令行运行环境生效,我们只要把命令行关掉再重新打开,之前用 export 设置的环境变量就都没有了。
可以试试,重新打开命令行,再次执行原来的命令,就会又抛出键值异常的错误了。
那又有同学会问了,我要在每次命令行运行时都想自动设置好环境变量怎么办呢?
这个就更好办了,只需要把 export 的这些命令加入到 ~/.bashrc 文件里面就好了,每次打开命令行的时候,系统都会自动先执行以下这个脚本里面的命令,这样环境变量就设置成功了。当然这里面还有很多不同的文件,如 ~/.bash_profile 、~/.zshrc 、~/.profile、/etc/profile 等等,其加载是有先后顺序的,大家感兴趣可以去了解下。
来源:https://cuiqingcai.com/8947.html


猜你喜欢
- 引言微信群的用户添加逻辑是 —— 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉
- 本文实例为大家分享了vuex实现购物车功能的具体代码,供大家参考,具体内容如下先看效果:代码:<template> <di
- 运行下面存储过程 然后直接使用 SpaceUsed 就可以查看了. 存储过程代码 程序代码 Create&n
- 今天彬Go将和大家一起讨论网页设计趋势中很重要的环节,那就是”勾引”用户的按钮。所谓”勾引”用户的按钮,其实对于Web设计师来说,就是如何设
- 隔离级别:隔离性其实比想象的要复杂。 在SQL标准中定义了四种隔离级别, 每一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见
- mysql字符串格式化今天有一个需求,mysql查询返回的格式为:80% ,而数据库中存储的是0.89的格式sql写法如下:select C
- 目的我们的目标是安装一个允许我们托管多个网站的web服务器,其中一些是针对电子商务的安全解决方案,而大部分网站是通过连接一个数据库服务器并且
- 在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合
- 一、前言在我们日常聊天的过程中会使用大量的表情包,那么如何去获取表情包资源呢?今天老师带领大家使用python中的爬虫去一键下载海量表情包资
- shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined var a = [1,2,3,4,5]; var b
- 本文实例讲述了Python实现给qq邮箱发送邮件的方法。分享给大家供大家参考。具体实现方法如下:#-*-coding:utf-8-*- &n
- 概述Visdom:一个灵活的可视化工具,可用来对于 实时,富数据的 创建,组织和共享。支持Torch和Numpy还有pytorch。visd
- 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架。我这里并不想探
- 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理==================DECLARE @
- 1、主从同步原理主从同步架构图(异步同步)这是最常见的主从同步架构主从同步流程(异步同步)主库把数据变更写入binlog文件从库I/O线程发
- 1、注释默认的SQLite3配置:blogproject/settings.py'''DATABASES = { &
- 第一种是最传统的写法,用存储过程中的变量作为分页的乘数 代码如下:[c-sharp] view plaincopyprint?create
- 由于新云CMS系统,网站底部“版权信息”字段在数据库中是“文本”类型,有250个字符的限制。想在这里给加网站统计代码,因为字数限制的原因,就
- 本文实例为大家分享了Python实现五子棋游戏的具体代码,供大家参考,具体内容如下了解游戏的规则是我们首先需要做的事情,如果不知晓规则,那么
- 你完成了你的品牌新的应用程序,一切工作就像一个魅力。用户来使用你的网络。每个人是幸福的。 然后,突然间,一个大爆发的用户杀死你的MySQL服