我使用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
init。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
这不起作用,我不知道为什么有帮助吗?
您需要根据以下内容的键值对自行设置环境条目:已加载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]
[请注意,您需要引用yes
,因为PyYAML仍仅实现YAML 1.1规范(已过时十年)它将看到yes
为布尔值。但是其他引号是不必要的。