如何将Python字典存储为环境变量

如何将Python字典存储为环境变量,python,dictionary,environment-variables,Python,Dictionary,Environment Variables,我试图存储一个Python可以作为字典读入的环境变量。如果这是一个坏主意,请让我知道你的建议,我渴望学习。我担心如果我将数据存储为尽可能多的环境变量,可能会变得难以管理 我编程了一个树莓圆周率解锁门的基础上来电的来电号码的Twilio号码,这是伟大的工作。我想在Github上分享我的代码以获得反馈,但我不想与世界分享我的电话号码列表,所以我尝试将其保存为一个环境变量,然后让Python读取它 电话号码在Python字典中,如下所示 building_admins = { "+277929

我试图存储一个Python可以作为字典读入的环境变量。如果这是一个坏主意,请让我知道你的建议,我渴望学习。我担心如果我将数据存储为尽可能多的环境变量,可能会变得难以管理

我编程了一个树莓圆周率解锁门的基础上来电的来电号码的Twilio号码,这是伟大的工作。我想在Github上分享我的代码以获得反馈,但我不想与世界分享我的电话号码列表,所以我尝试将其保存为一个环境变量,然后让Python读取它

电话号码在Python字典中,如下所示

building_admins = {
    "+27792955555": "De Wet",
    "+27722855555": "Marysol",
    "+27878085555": "Blomerus",
}
我正试图将其保存为Ubuntu 14.04上的环境变量

export BUILDING_ADMINS='{
    "+27792955555": "De Wet",
    "+27722855555": "Marysol",
    "+27878085555": "Blomerus",
}'
1) 我无法让Linux保存环境变量,我可以做些什么来让它工作吗


2) 我觉得一定有更好的方法来解决这个问题,我走错了方向,但我在谷歌上找到的似乎并没有解决我所面临的问题。请给我指出正确的方向。

如果您选择使用环境,您应该将Python字典序列化为JSON,并在设置/获取环境变量时转储/加载它。您可以使用
os
模块的
environ
属性访问环境。您可以使用
JSON
模块转储/加载JSON。如果存在这样的情况,您可能需要注意环境变量的最大长度


如果我是你,我会使用sqlite数据库,请参阅。这将为您提供持久性、定义的模式和处理数据的良好界面。

脚本用户不希望设置环境变量。使用
json
模块和一个文件:

import json

with open('numbers') as f:
    numbers = json.load(f)

print numbers['+27792955555']    #  De Wet

推送到GitHub时,不要提交
数字
文件。可能会提交一个示例,并将真实的示例添加到您的
.gitignore

这是可能的!照办

import os
os.environ.__dict__["_data"]["yourkey"] = {"key":0} #Your data
print (os.environ.__dict__["_data"]["yourkey"]) #Will print out value!

这有点复杂,但很有效

我不知道这是否是您正在寻找的,但我在尝试将字典保存为Linux环境变量以在我的应用程序上使用它时,最终来到了这里

我所做的是将其保存为如下字符串:

export BUILDING_ADMINS="{'+27792955555': 'De Wet','+27722855555': 'Marysol','+27878085555': 'Blomerus'}'
然后在python代码上阅读并使用以下内容将其转换为字典(摘自:):

如果你打字

type(ba_dict)
您应该看到您的字符串现在是dict

<class 'dict'>


希望这对其他人有帮助

有一个名为environs的选项,不幸的是,导出的方式与您想要的有点不同,但我会建议您,因为这可能是您或其他人的替代方案(我需要改天再做)

您可以通过终端导出,甚至可以创建
.env
文件

export BUILDING_ADMINS=+27792955555=De Wet,+27722855555=Marysol, +27878085555=Blomerus
在守则中:

from environs import Env

env = Env()
env.read_env() // to allow reading from .env file

building_admins = env.dict('BUILDING_ADMINS', subcast=str)
结果:

print(building_admins)

我建议您使用
environ
,因为该库做了一些额外的安全检查,并且看到了各种各样的用例

您的
config.py

import environ

# Django cookiecutter does it like this.
env = environ.Env()
ROOT_DIR = (
    environ.Path(__file__)
) # let's say your configs sit at the root of the project and it's called .env
env.read_env(str(ROOT_DIR.path(".env")))

# Your env variable looks like a JSON
# There are multiple types available that you can go for if you don't think JSON is correct.
BUILDING_ADMINS = env.json('BUILDING_ADMINS')
来自配置导入的
>>*
>>打印(楼宇管理员)
{
“+27792955555”:“去湿”,
“+2772285555”:“Marysol”,
“+27878085555”:“Blomerus”
}
>>类型(建筑管理员)

请确保不要上传
numbers.json
,方法是在repo的
.gitignore
中忽略它,或者将它放在用户主目录中的点文件中并从中读取,从而在repo之外(例如
~/.numbers.json
)。还可以查看是否选择后一个选项。当设置
os.environ['TEST']='TEST'
时,表示运行
!ipython shell中的echo$TEST将输出正确的值,当您开始尝试填充字典时,它将爆炸。
print(building_admins)
{
    "+27792955555": "De Wet",
    "+27722855555": "Marysol",
    "+27878085555": "Blomerus",
}
pip install environs
import environ

# Django cookiecutter does it like this.
env = environ.Env()
ROOT_DIR = (
    environ.Path(__file__)
) # let's say your configs sit at the root of the project and it's called .env
env.read_env(str(ROOT_DIR.path(".env")))

# Your env variable looks like a JSON
# There are multiple types available that you can go for if you don't think JSON is correct.
BUILDING_ADMINS = env.json('BUILDING_ADMINS')