首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从环境文件中读入环境变量

从环境文件中读入环境变量
EN

Stack Overflow用户
提问于 2016-10-24 18:36:45
回答 8查看 147.3K关注 0票数 125

我想在本地环境中运行Python脚本,该脚本通常在Docker容器中运行。docker-compose.yml指定了一个(部分)类似以下内容的env_file

代码语言:javascript
复制
DB_ADDR=rethinkdb
DB_PORT=28015
DB_NAME=ipercron

为了在本地运行,我希望将这些行转换为

代码语言:javascript
复制
os.environ['DB_ADDR'] = 'rethinkdb'
os.environ['DB_PORT'] = '28015'
os.environ['DB_NAME'] = 'ipercron'

我可以写我的解析器,但是我想知道是否有任何现有的模块/工具可以从配置文件中读取环境变量?

EN

回答 8

Stack Overflow用户

发布于 2020-04-04 22:40:06

我使用Python Dotenv Library。只需安装库pip install python-dotenv,使用您的环境变量创建一个.env文件,然后将环境变量导入您的代码中,如下所示:

代码语言:javascript
复制
import os
from dotenv import load_dotenv

load_dotenv()

MY_ENV_VAR = os.getenv('MY_ENV_VAR')

.env文件:

代码语言:javascript
复制
MY_ENV_VAR="This is my env var content."

当我需要在docker系统之外测试代码并准备将其返回到docker时,我就是这样做的。

票数 140
EN

Stack Overflow用户

发布于 2021-01-13 09:17:14

如果您的系统/环境/工作流支持使用shell脚本,您可以创建一个脚本来包装这两个操作:

使用

  1. Sourcing the .env file and exporting them as environment variables选项导出导出,其中创建或修改的每个变量或函数都被赋予set -a属性,并标记为要导出到后续的环境中

  1. 调用具有纯os.environ.get代码的Python脚本/应用程序

示例(config.env):.env文件

代码语言:javascript
复制
TYPE=prod
PORT=5000

Python代码示例(test.py):

代码语言:javascript
复制
import os

print(os.environ.get('TYPE'))
print(os.environ.get('PORT'))

示例bash脚本(run.sh):

代码语言:javascript
复制
#!/usr/local/bin/bash

set -a
source config.env
set +a

python3 test.py

示例运行:

代码语言:javascript
复制
$ tree
.
├── config.env
├── run.sh
└── test.py

$ echo $TYPE

$ echo $PORT

$ python3 test.py
None
None

$ ./run.sh 
prod
5000

当您直接运行Python脚本(python3 test.py)而不使用source-ing .env文件时,所有environ.get调用都将返回None

但是,当您将其包装在一个shell脚本中时,该脚本首先将.env文件加载到环境变量中,然后运行Python脚本,Python脚本现在应该能够正确地读取环境变量。

other popular answer相比,它不需要任何外部Python库。

票数 19
EN

Stack Overflow用户

发布于 2018-08-18 07:48:23

这对你也是有效的:

代码语言:javascript
复制
env_vars = [] # or dict {}
with open(env_file) as f:
    for line in f:
        if line.startswith('#') or not line.strip():
            continue
        # if 'export' not in line:
        #     continue
        # Remove leading `export `, if you have those
        # then, split name / value pair
        # key, value = line.replace('export ', '', 1).strip().split('=', 1)
        key, value = line.strip().split('=', 1)
        # os.environ[key] = value  # Load to local environ
        # env_vars[key] = value # Save to a dict, initialized env_vars = {}
        env_vars.append({'name': key, 'value': value}) # Save to a list

print(env_vars)

在评论中,你会发现一些不同的方法来保存环境变量,还有一些解析选项,比如去掉前导关键字export。另一种方法是使用python-dotenv库。干杯。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40216311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档