Skip to main content

什么是环境变量?

当前操作系统在启动进程时传给它的一组“键-值”配置。
在Linux/macOS系统中(终端上) 通过echo $VAR,windows 上通过env:VAR, 三方程序进程中也提供了获取环境变量的方法,如node 的process.env和java 的System.getenv("KEY")
当然python 也内置了获取环境变量的方法。 python 中的环境变量是有 内置模块 OS 提供能力!

获取环境变量

import os

# 获取所有环境变量
print(os.environ)

## 获取指定环境变量(不存在会报错)
print(os.environ['HOME'])

## 获取指定环境变量(不存在则为 None)
print(os.environ.get('HOME'))


## 获取指定环境变量(os.environ.get(key, default) 的封装)
print(os.getenv('HOME'))

## 默认值
os.getenv('someKey', 'xxx') # 当环境变量 someKey 不存在时,会返回 'xxx'。

## 设置环境变量(仅当前进程和子进程可见)
os.environ['MY_VAR'] = 'my_value'

.env 文件

一般情况下,编程语言都喜欢把配置文件放在一个单独的本项目的环境变量文件中(一般是根目录的 .env),然后通过程序加载这个文件内容到环境变量中。
APP_ENV=production
APP_NAME=啥也不是系统
python也不例外,python 中也可以使用 python-dotenv 库来加载 .env 文件中的环境变量到当前进程中,这样就可以在代码中直接使用 os.getenv(“VAR”) 读取 .env 中的键值
from dotenv import load_dotenv; 

load_dotenv()
print(os.getenv('APP_NAME'))
注意的是这并不是“注入到系统里”。python-dotenv 只是把 .env 里的键值加载进当前 Python 进程的环境(os.environ)。要点:
  • 作用范围:仅当前进程;不会修改操作系统的全局环境,也不会影响启动它的父进程/终端。
  • 生命周期:随当前进程结束而消失。
  • 可见性:只有在加载之后由该进程创建的子进程会继承这些变量。