首页 > 解决方案 > 如何使用 python 2.7 从特定文件中读取环境变量

问题描述

为了声明一些环境变量,然后使用它们调用一些 python 脚本,我创建了一个 myfile.sh 文件,该文件由 bash myfile.sh 运行。但是,我有很多脚本应该读取这些环境变量,但不能为每个脚本创建一个 myfile.sh!

所以我的想法是创建一个环境变量文件并通过我的每个 python 脚本访问它。

所以我的问题是,如何使用 python 2.7 访问这样的文件?

一个最相关的问题如下: os.environ 从哪里读取环境变量?

应该注意的是,我无法安装其他库,例如 dotenv。因此,如果可能,解决方案应该基于标准库。

任何帮助将不胜感激!

标签: pythonenvironment-variables

解决方案


我必须创建一个应该由我的脚本访问的新环境变量文件。

这不是它的工作原理。您需要在调用脚本之前从文件中设置环境变量:

myenv.sh

export DB_USER="foo"
export DB_PWD="bar"
export DB_NAME="mydb"
# etc

我的脚本.py

import os

DB_USER = os.getenv("DB_USER")
DB_PWD = os.getenv("DB_PWD")
DB_NAME = os.getenv("DB_NAME")

# etc

然后

$ source /path/to/myenv.sh
$ python /path/to/myscript.py

大多数情况下,您希望将以上两行代码包装在一个 shell 脚本中,以使您的系统管理员的工作更轻松。

编辑:如果您希望这些环境变量“自动”设置,您始终可以从 .bashrc 或类似的地方获取它们 - 但这是一个系统管理员问题,而不是编程问题。

现在的问题是:你真的需要在这里使用环境变量吗?您也可以使用 python 设置文件 - 一个仅定义这些变量的普通 Python 模块,即:

我的设置.py

DB_USER = "foo"
DB_PWD = "bar"
# etc

并确保包含此脚本的目录的路径在您的 $PYTHONPATH 中。然后你的脚本只需要导入它(就像它们导入任何其他模块一样),你就完成了。

锦上添花:您甚至可以混合使用这两种解决方案,方法是让您的设置模块查找环境变量并提供默认值,即:

我的设置.py

import os
DB_USER = os.getenv("DB_USER", "foo")
DB_PWD = os.getenv("DB_PWD", "bar")
# etc

推荐阅读