pythonソースファイルのパスを解析し、それぞれのファイルとDoStuff ™をインポートされた各モジュールにインポートしようとしています。各.pyファイルをパスに読み込む - imp.load_moduleは相対インポートについて文句を言います
def ParsePath(path):
for root, dirs, files in os.walk(path):
for source in (s for s in files if s.endswith(".py")):
name = os.path.splitext(os.path.basename(source))[0]
m = imp.load_module(name, *imp.find_module(name, [root]))
DoStuff(m)
上記のコードは動作しますが、パッケージが認識されないValueError: Attempted relative import in non-package
私の質問は、私は与えられたモジュールがパッケージの一部であることをimp.load_module
を教えてくださいどのように、基本的にはありますか?
あなたはどのようなディレクトリ構造を持っていますか?関数に渡す 'path'はパッケージのルートパスですか? – shang
この質問の目的の一部は、パスに関係なく、パッケージを手動で作成する方法を理解することです。確かに、ParsePathを迂回させて、常にコンテンツの前に '__init __。py'を含むディレクトリをインポートしようとしました。私はそれがうまくいくと思っていますが、それはIMHOの問題を解決する正しい方法ではありません。 – porgarmingduod