如何让Python优先读取本地.env文件中的STAGING_BUCKET变量?
问题:Python代码读取全局环境变量而非.env文件中的值
相关文件内容
.env 文件
STAGING_BUCKET=our-staging-bucket
common.py 文件(与.env同目录)
import os STAGING_BUCKET = os.getenv('STAGING_BUCKET') print(STAGING_BUCKET)
问题描述
本地运行Airflow项目时,STAGING_BUCKET变量获取到的值是diff-staging-bucket,而非.env文件中设置的our-staging-bucket。即使已修改.env文件中的变量值,os.getenv('STAGING_BUCKET')仍读取全局存储的旧值,甚至在主目录运行这段代码,返回的还是diff-staging-bucket。
补充说明:执行env命令确认,系统全局环境中存在值为diff-staging-bucket的STAGING_BUCKET变量。
解决方法
- 安装
python-dotenv库:该库专门用于加载.env文件中的环境变量,执行命令安装:pip install python-dotenv - 修改common.py代码,添加加载.env文件的逻辑:
import os from dotenv import load_dotenv # 加载同目录下的.env文件 load_dotenv() STAGING_BUCKET = os.getenv('STAGING_BUCKET') print(STAGING_BUCKET) - 若希望.env文件的变量覆盖全局环境变量,修改
load_dotenv的参数:
这样即使全局有同名变量,也会优先使用.env文件中的值。load_dotenv(override=True)
如果不想依赖第三方库,也可以手动读取.env文件并设置环境变量:
import os def load_env(): with open('.env', 'r') as f: for line in f: line = line.strip() if line and not line.startswith('#'): key, value = line.split('=', 1) os.environ[key] = value load_env() STAGING_BUCKET = os.getenv('STAGING_BUCKET') print(STAGING_BUCKET)
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

