我正在尝试根据名称导入文件,例如:
project /
__init__.py
log.py
conf /
__init__.py
logger_settings.py
other_settings.py
在我的conf/__init__.py
文件中,我希望有类似的内容:
# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab
import os
import sys
import json
def get_settings(identity):
"""Settings."""
try:
from i import *
except ImportError as exc:
raise Exception('Eror importing config %s' % exc)
因此,在log.py
文件中,我可以做到这样的事情:
#!/usr/bin/env python -u
# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab
import os
import logging
from project import conf
CONF = conf.get_settings('logger_settings')
def getLogger(identity ,log_file=CONF.log_file):
# Then access CONF to return settings
# For example:
# host = CONF.host would return something like 'localhost'
我希望logger_settings.py
像这样:
log_file = '/mnt/logs/'
host = 'localhost'
如何修改conf/__init__.py
以实现此目标?
答案 0 :(得分:1)
请参阅__import__
内置(低级别)以及importlib
(高级别)。
这些提供了一种动态导入模块的方法(即,其名称由运行时值给出)。
import importlib
settings = importlib.import_module('conf.%s' % i)