2012-05-11 5 views
1

web2pyプロジェクトにimport loggingという1行のモジュールをインポートしようとしています。 mymodulesというパッケージ内からモジュールをインポートしようとすると、<type 'exceptions.NameError'> name 'logging' is not defined errorが出ますが、モジュールをパッケージから取り出して直接インポートすると、正常に動作します。パッケージからインポートしたときにモジュールスロー名エラーが発生しました

mymodule.py:トップレベルのmodulesディレクトリからそれをインポート

import logging 

:名前エラー

に取得する - : -
from mymodules import mymodule
import mymoduleパッケージからインポート細かい

作品

パッケージに何も問題はありません。私はそこに他のモジュールを持っていて問題なくインポートできます。なぜこれが起こっているのかという手がかりはありません。

答えて

1

mymoduleをインポートすると、loggingではなくmymodule.loggingを参照する必要があります。

+0

アンチ・ロギングができないAnthonyは、Python標準ライブラリの一部です。私が望むモジュールにインポートすることができるはずです。そして、私はまだ何も言及していない、私はモジュールをインポートして、すでにエラーを取得しています。 – Yarin

+0

いいえ、問題はmymodule.pyの中でロギングをインポートすることではありません。問題は、アプリケーションでmymoduleをインポートすると、ログはmymodule名前空間にあるため、 'logging'だけでなく、' mymodule.logging'として参照する必要があることです。取得したエラーは、import文の結果ではなく、ある時点で 'logging'を参照した結果になります。どうやら、 'logging'を指しているところでは、その名前空間では利用できません。 'from mymodules import mymodule'ステートメントはどこにありますか?完全なトレースバックを表示できますか? – Anthony

+0

また、import文に.py拡張子を含めないでください。これは 'from mymodules import mymodule'でなければなりません。 – Anthony

0

まず、ファイル拡張子.pyをインポートステートメントに追加する必要はありません。だから、次のようになります。

import mymodule 
mymodule.logging.info("Just some info") 

アンソニーは、あなたがそこからログを使用できるようにしたい場合、あなたはまた、ワイルドカードのインポートを使用することができますが、あなただけである必要がmymodule.loggingを経由して、それを呼び出す必要があります、しかし正しいですか次にあなたがmymoduleでインポートするものを少し注意してください。

from mymodule import * 
#now you can use logging directly 
logging.info("Just some info") 
+0

MattoTodd-なぜ標準ライブラリモジュールは名前空間にする必要がありますか?彼らは問題のインポートされたモジュールに属していませんか? – Yarin

0

これは、古い.pycファイルがパッケージに残っているために起こっていました。これは、悪いロギング参照を引き起こしていたに違いありません。私がそれらをクリアすると、私の問題は解決されました。 :S

関連する問題