我想在本地环境中运行一个Python脚本,通常在Docker容器中运行。docker-compose。Yml指定了一个env_file,看起来(部分)像下面这样:
DB_ADDR=rethinkdb
DB_PORT=28015
DB_NAME=ipercron
为了在本地运行,我希望将这些行转换为
os.environ['DB_ADDR'] = 'rethinkdb'
os.environ['DB_PORT'] = '28015'
os.environ['DB_NAME'] = 'ipercron'
我可以编写我的解析器,但我想知道是否有任何现有的模块/工具可以从配置文件中读取环境变量?
如果你的系统/环境/工作流支持使用shell脚本,你可以创建一个脚本来包装这两个操作:
获取.env文件并将其导出为环境变量
使用set -a选项,其中“每个创建或修改的变量或函数都被赋予export属性,并标记为导出到后续命令的环境”。
调用具有简单os. environment .get代码的Python脚本/应用程序
示例.env文件(config.env):
TYPE=prod
PORT=5000
示例Python代码(test.py):
import os
print(os.environ.get('TYPE'))
print(os.environ.get('PORT'))
示例bash脚本(run.sh):
#!/usr/bin/env bash
set -a
source config.env
set +a
python3 test.py
示例运行:
$ tree
.
├── config.env
├── run.sh
└── test.py
$ echo $TYPE
$ echo $PORT
$ python3 test.py
None
None
$ ./run.sh
prod
5000
当您直接运行Python脚本(python3 test.py)而不获取.env文件时,所有的environ。get calls返回None。
但是,当您将它包装在一个shell脚本中,该脚本首先将.env文件加载到环境变量中,然后再运行Python脚本时,Python脚本现在应该能够正确地读取环境变量。它还确保导出的env变量仅作为Python应用程序/脚本执行的一部分存在。
与其他流行的答案相比,这不需要任何外部Python库。