0

たとえば、名前に基づいてファイルをインポートしようとしています。

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これを達成するには、どのように変更する必要がありますか?

4

1 に答える 1

1

__import__ビルトイン (低レベル) と(高レベル)を参照してくださいimportlib

これらはモジュールを動的にインポートする手段を提供します (つまり、その名前はランタイム値によって与えられます)。

import importlib
settings = importlib.import_module('conf.%s' % i)
于 2013-10-23T14:48:47.897 に答える