2017-07-26 19 views
0

私は2つのpythonスクリプトを持っています。Python - 一度だけのインポートモジュール

satellite_utils.py 
apply_errata.py 

私が実行するスクリプトは次のとおりです。

python3.4 apply_errata.py 

satellite_utils.pyで定義された関数を呼び出しますapply_errata.py

今、メッセージloggingを使用してメッセージを記録しています。私はこれをすべてのスクリプトで宣言するのではなく、一度だけインポートします。

私はapply_errata.pyloggingを定義し、参照がsatellite_utils.pyでそれになされている場合は、私が手:

Traceback (most recent call last): 
    File "apply_errata.py", line 20, in <module> 
    satellite_utils.applyErrata(args.release, args.all, args.rollback) 
    File "/root/config-3.1.21/automated-os-patching/satellite_utils.py", line 34, in applyErrata 
    applyErrataOnSystem(system, release, automaticRollback, [erratum]) 
    File "/root/config-3.1.21/automated-os-patching/satellite_utils.py", line 39, in applyErrataOnSystem 
    logging.warning('is when this event was logged.') 
NameError: name 'logging' is not defined 

私はeveryfileにimport文を避けることができます任意の方法を?

+0

すべてのファイルにインポートしてみませんか? – bereal

+4

モジュールを使用する場合は、モジュールをインポートする必要があります。モジュールをインポートしても、複数回読み込まれているわけではありません。それは単にコード内で参照していることを意味します。 – MrE

+2

'logging'を必要とするすべてのモジュールは' import logging'を行うべきです。 – user2357112

答えて

-1

スクリプトで必要なライブラリをインポートし、そのスクリプト内のすべてをwildcharを使用して別のスクリプトにインポートすることで実行できます。これを行うことで、それらのすべてを再度インポートするのではなく、それらを参照しています。最も重要なスクリプトで使用しているかのように、2番目のスクリプトで使用できます。例えば

: 1 Script1.py

import logging 
import something 
..... 
... 
log_i=logging.info 
log_d=logging.debug 
  • Script2.py

    from Script1 import * #import all in Script1 
    log_i("this is info log") 
    log_d("this is debug log")#use the imported data 
    
  • ここ

    SCRIPT1にインポートされ、ログと私はScript1からScript2にすべてをインポートしています。つまり、Script1で使用されているすべてのライブラリ、変数、関数定義はScript2からアクセス可能で変更可能です。したがって、私はScript2の宣言/割り当てなしで直接ロギングを使用しています。

    @ anugrahのコメントでは、__init__.pyを使用して、ディレクトリ内のモジュールを初期化して、上記の方法のようにインポートして使用することができます。この方法を選択するのであれば、それは次のようになります

    ABC/__ init__.py

    ABC/modules.py

    import logging,os,sys 
    log_i=logging.info 
    log_d=logging.debug 
    

    Script1.py

    from abc.modules import log_* #now I'm importing only log_i,log_d 
    log_i("this is info log") 
    log_d("this is debug log") 
    
    +0

    '__init __。py'ファイルにも追加できます! http://effbot.org/pyfaq/what-is-init-py-used-for.htm – anugrah

    +0

    あなたの '__init __。py'の記述は間違っていて、すべてのインポートを1つのモジュールに詰め込み、' import *循環輸入の問題への迅速な道だ。 – user2357112