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

pqwbnv8z  于 2023-03-28  发布在  Python
关注(0)|答案(7)|浏览(184)

我正在尝试存储一个Python可以读取的环境变量作为字典。如果这是一个坏主意,请让我知道你的建议,我渴望学习。我担心如果我将数据存储为许多环境变量,它可能会变得难以管理。
我编写了一个Raspberry Pi来解锁一扇门,它是基于Twilio号码的来电的来电ID,它工作得很好。我想在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)我觉得一定有更好的方法来做到这一点,我走错了方向,但我似乎没有找到与谷歌是解决我所面临的问题。请指出我在正确的方向。

col17t5w

col17t5w1#

我不知道这是不是你要找的东西,但我在尝试将字典保存为Linux环境变量以在我的应用程序上使用它时,最终出现在这里。
我所做的是将它保存为这样的字符串:

export BUILDING_ADMINS="{'+27792955555': 'De Wet','+27722855555': 'Marysol','+27878085555': 'Blomerus'}'

然后在你的python代码中读取它,并使用这个将它转换为字典(摘自:Convert a String representation of a Dictionary to a dictionary?):

import ast
import os

ba_dict = ast.literal_eval(os.environ["BUILDING_ADMINS"])

如果你输入

type(ba_dict)

你应该看到你的字符串现在是一个dict。

<class 'dict'>

希望这对其他人有帮助!

gdx19jrr

gdx19jrr2#

环境变量不是脚本用户想要设置的东西。使用json模块和一个文件:

import json

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

print numbers['+27792955555']    #  De Wet

当推送到GitHub时,不要提交numbers文件。也许提交一个示例文件,然后将真实的的文件添加到.gitignore中。

yizd12fk

yizd12fk3#

如果你选择使用环境,你应该将Python字典序列化为JSON,并在设置/获取环境变量时转储/加载它。你可以使用os模块的environ属性访问环境。你可以使用json模块转储/加载JSON。如果有这样的事情,你可能需要注意环境变量的最大长度。
如果我是你,我会使用一个sqlite数据库,见https://docs.python.org/2/library/sqlite3.html。这将给予你持久性,一个定义的模式,和一个很好的接口来处理你的数据。

lfapxunr

lfapxunr4#

有一个名为环境的选项,不幸的是,出口的方式与您想要的略有不同,但我会建议您,因为可以为您或其他人提供替代方案(我需要改天再做)。
https://pypi.org/project/environs/

pip install 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)

结果:
一个三个三个一个

aiazj4mn

aiazj4mn5#

我建议你使用environ,因为这个库做了一些额外的安全检查,并且已经看到了各种各样的用例。
https://pypi.org/project/environs/

pip install environs

您的config.py
x一个一个一个一个x一个一个二个x

vx6bjr1n

vx6bjr1n6#

由于我不想插入新的包环境,我尝试了所有其他公开的解决方案,但在Python 3.6中,没有一个对我有效。
我把下面的env变量转换成dict对象的解决方案是:

MY_ENV_VAR_DICT="{'test1':'test1','test2':'test2'}"

验证码:

import os

my_dict = eval(os.environ['MY_ENV_VAR_DICT'].replace('"',''))
print(my_dict.items())

输出:

dict_items([('test1', 'test1'), ('test2', 'test2')])

这对我来说很好用(没有多余的导入)!:)

cu6pst1q

cu6pst1q7#

这是可能的!去做吧

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

这是一个有点复杂,但工作!

相关问题