You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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的参数:
    load_dotenv(override=True)
    
    这样即使全局有同名变量,也会优先使用.env文件中的值。

如果不想依赖第三方库,也可以手动读取.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:40:41