无法从Yaml文件设置环境变量

时间:2019-10-31 12:03:56

标签: python-3.x pyyaml

我当时使用environ来设置环境变量,但是现在我需要更改为yml文件。 我已经创建了一个函数来打开我的yml文件并加载它,我认为这里一切正常。 然后在我的__init__.py中使用该函数,将路径传递到yml文件,然后使用app.config.from_object(data)将环境变量加载到系统中。 问题是我在yml文件中设置的环境变量没有被应用程序使用,因为我收到一个错误消息,说我的LDAPUSERNAME不能为None。

这是我使用环境的config.py:

LDAP_BASE_DN = os.environ.get('LDAP_BASE_DN', default= "dc=planetexpress,dc=com")
LDAP_USERNAME = os.environ.get('LDAP_USERNAME', default="CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com")
LDAP_PASSWORD = os.environ.get('LDAP_PASSWORD', default="hermes")

这是我要使用的yml文件:

LDAP_BASE_DN: 'dc=planetexpress,dc=com'
LDAP_USERNAME: 'CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com'
LDAP_OPENLDAP: 'yes'

yaml_loader.py


from yaml import load, Loader, dump, Dumper



def yaml(filepath):
    with open(filepath, 'r') as stream:

        data_loaded = load(stream, Loader=Loader)

        return data_loaded

初始化 .py

app.config.from_object('dev_maintenance.config')---> "used to load the environ"

data = yaml_loader.yaml("/Users/pjose/Project/dev_maintenance/backend/config.yml")
app.config.from_object(data) ---> using now to load the yml

它不起作用,我不知道为什么 有帮助吗?

1 个答案:

答案 0 :(得分:0)

您需要根据的键值对自己设置环境条目 已加载final List<DocumentSnapshot> documents; final Map<String, double> concept; concept= documents.fold({}, (Map<String, double> map, document) { if (!map.containsKey(document['name'])) { map[document['name']] = 0.0; } map[document['name']] += document['age']; return map; } print(concept); //name1, 80

data

请注意,您需要引用import os from yaml import load, Loader yaml_str = """\ LDAP_BASE_DN: dc=planetexpress,dc=com LDAP_USERNAME: CN=Hermes Conrad,ou=people,dc=planetexpress,dc=com LDAP_OPENLDAP: 'yes' """ data = load(yaml_str, Loader=Loader) for k in data: os.environ[k] = data[k] ,因为PyYAML仍仅实现 YAML 1.1规范(已过时十年) 它将yes视为布尔值。但是其他引号是不必要的。