2016-12-13 5 views
0

私はいくつかのモジュールを持つパッケージを持っていますconfiglogging(とりわけ)。モジュールの一部をインポートする

モジュールloggingモジュールは、パッケージのログファイル(configモジュールで定義されています)にログインする方法を提供します。

configモジュールには、静的な設定値(ハードコードされた)とファイルからロードされた動的な値が含まれています。

mypackage/logging.py

import mypackage.config 

def log(message): 
    log_file = mypackage.config.log_file 
    open(log_file, "a").write(message + "\n") 

mypackage/config.py

import mypackage.logging 

log_file = "/var/log/mypackage.log" 

try: 
    # Load some more config from file. 
except Exception as e: 
    # That's fine, just log that we couldn't open the file. 
    mypackage.logging.log("Couldn't open config file: %s" % str(e)) 

問題は、上記のコードは、mypackage/config.pyからmypackage.logging.log()を呼び出すことがその手段のインポートを完了する前に円形の依存関係の問題に苦しんでいることですlog_file = mypackage.config.log_file行内mypackage/logging.pyは失敗します。

それはmypackage.logging.log()が呼び出されたときにそれがmypackage.config.log_fileで利用可能であるように、モジュールにmypackage/config.pyの静的な部分をインポートすることは可能ですか?

この問題がなければ、これを設計することはできません。

答えて

1

あなたはlog機能でconfig.log_fileをインポートすることができ、あなたの現在のコードの動作させるために:もちろん

def log(message): 
    from mypackage.config import log_file 
    open(log_file, "a").write(message + "\n") 

を、あなたは、システム全体を再設計するために多くの可能性を持っています。 たとえば、循環依存関係を作成するすべての設定を独自の設定ファイルに入れて、logging.pyconfig.pyの両方からインポートすることができます。

関連する問題