[英]How to store a Python dictionary as an Environment Variable
我正在尝试存储一个 Python 可以作为字典读取的环境变量。 如果这是一个坏主意,请告诉我您的建议,我渴望学习。 我担心如果我将数据存储为许多环境变量,它可能会变得难以管理。
我对 Raspberry Pi 进行了编程,以根据 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)我觉得必须有更好的方法来做到这一点,我走错了方向,但我似乎用谷歌搜索没有找到解决我面临的问题的方法。 请指出我正确的方向。
我不知道这是否是您要查找的内容,但我在尝试将字典另存为 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)
你应该看到你的字符串现在是一个字典。
<class 'dict'>
希望这对其他人有帮助!
如果您选择使用环境,您应该在设置/获取环境变量时将 Python 字典序列化为 JSON 并转储/加载它。 您可以使用os
模块的environ
属性访问环境。 您可以使用json
模块转储/加载 JSON。 如果有这样的事情,您可能需要注意环境变量的最大长度。
如果我是你,我会使用 sqlite 数据库,请参阅https://docs.python.org/2/library/sqlite3.html 。 这将为您提供持久性、定义的模式和用于处理数据的良好界面。
环境变量不是脚本用户想要设置的。 使用json
模块和一个文件:
import json
with open('numbers') as f:
numbers = json.load(f)
print numbers['+27792955555'] # De Wet
推送到 GitHub 时不要提交numbers
文件。 也许提交一个示例并将真实的添加到您的.gitignore
。
有一个名为环境的选项,不幸的是,导出方式与您想要的方式略有不同,但我会建议您,因为可以作为您或其他人的替代方案(我需要改天再做)。
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)
结果:
print(building_admins)
{
"+27792955555": "De Wet",
"+27722855555": "Marysol",
"+27878085555": "Blomerus",
}
我建议您使用environ
只是因为该库进行了一些额外的安全检查并且已经看到了各种用例。
https://pypi.org/project/environs/
pip install environs
你的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')
>> from configs import *
>> print(BUILDING_ADMINS)
{
"+27792955555": "De Wet",
"+27722855555": "Marysol",
"+27878085555": "Blomerus"
}
>> type(BUILDING_ADMINS)
<class 'dict'>
有可能的! 做就是了
import os
os.environ.__dict__["_data"]["yourkey"] = {"key":0} #Your data
print (os.environ.__dict__["_data"]["yourkey"]) #Will print out value!
这有点复杂,但有效!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.