2011-06-22 2 views
1

ここでは、ディレクトリ内のすべてのモジュールを動的にインポートする(量/名前は不明)と、見つかったモジュールごとにcheckMeという関数を呼び出すことを試みています)。 checkMe()は各モジュール内にあることが保証されているので、チェックする必要はありません。これは私がこれまで持っているものです。動的なモジュールのリストからメソッドを呼び出す

checkMe()

for module in __modules__: 
    m = getattr(sys.modules[__name__], module) 
    getattr(m, 'checkMe').__call__() 

しかし、私はこのエラーを取得する呼び出す

インポート

import sys 
import os 
import glob 

pathname = os.path.dirname(sys.argv[0]) + "/" 
pathname = pathname + "/modules/" 

__modules__ = [ os.path.basename(f)[:-3] for f in glob.glob(os.path.dirname(pathname)+"/*.py")] 

for module in __modules__: 
    __import__(module) 

AttributeError: 'module' object has no attribute 'sendme' 

(SENDMEを最初のモジュールです)

ご協力いただきありがとうございます...ありがとうございます!

+0

あなたは 'pathname'、' __modules__'のために得るかを示すために、いくつかのprint文を追加します。それがあるので、パスでモジュールを実行すると、(:Pythonの2.7以降が必要run_pathコメントから)runpyと最も簡単です –

+0

私は輸入がうまくいっていると確信しています...私はそれをデバッグしました。 – pdeuchler

+0

これは '__module__'で終わるものを見るのに役立つかもしれません。変数に代入するときはいつでもprintステートメントを追加して、アプリケーション全体の状態を追跡し、どこが間違っているのかを把握することができます。 –

答えて

0

__import__は、パッケージ(ディレクトリが__init__.pyを含むディレクトリ)といくつかの面倒なセマンティクスを持っています。それを有効にするには、fromlist引数を使用する必要があります。 、

import runpy 
runpy.run_path('path/to/file.py') 
+0

上記のように、インポートが機能していると確信しています。 – pdeuchler

+0

@pdeuchlerいいえ、インポートはあなたが期待しているモジュールを返すことはありません。 'help(__ import __)'はあなたを納得させるでしょう。 – Tobu

+0

@Tobu: "パッケージからモジュールをインポートするとき、' __import __( 'A.B'、...) 'は、fromlistが空であるときにパッケージAを返しますが、fromlistが空でないときはサブモジュールBを返します。それ? – JAB

関連する問題