2013-04-18 9 views
6

mymoduleというPythonモジュールがあるとします。まだ1つのモジュールとして定義されながら、私のディレクトリ構造は、しかし、私は、いくつかのファイルにmymodule.pyを分割するPython:モジュールを複数のファイルで定義する

/dir/mymodule.py 

たいと思いれる

import mymodule 
reload(mymodule) 

:私のコードの上部には、私はこれを持っています(つまり、私は別々に各ファイルをインポートする必要はありません - 私は前と同じように私のインポート/リロードを使用できるようにしたい)。

私はこれを行う方法を知っている唯一の方法は、__init__.py

from file1 import * 
from file2 import * 

含まれている。これは、ほとんど働かないが、それはdoesnのためreload(mymodule)に私の呼び出しはもはや、何もしない、次の

/dir/mymodule/ 
      file1.py 
      file2.py 
      __init__.py 

です* importを介して呼び出されたものをリロードしません。

提案がありますか?

+1

私はこれに対する答えも知っています。この望ましいパターンの理由は何ですか? – BlackVegetable

+1

なぜモジュールをインポートしてすぐにリロードする必要がありますか? – Ixanezis

+0

ちょうど好奇心から、なぜあなたのコードはこのように構造化されていますか? – Blender

答えて

1

私はあなたがこれをやっている理由を正確にはわかりませんが、理由があると思います。私はこれがうまくいくと思う:

__init__.py:

import file1 
reload(file1) 
from file1 import * 

もちろん、あなたが、私はこれはreload(mymodule.file1)を呼ぶだろう

import sys 

def myreload(base_module_name): 
    for module_name, module in sys.modules.items(): 
     if module_name.startswith(base_module_name): 
      reload(module) 

myreload('mymodule') 

勧めでき迅速な回避策は、reload(mymodule.file2)などについても同様に

+0

あなたの投稿を編集して '__init __。py'の周りにバッククォートを追加してください...今は太字で表示されています。私は6文字を変更したいので編集できませんが、バッククォートはわずか2文字です。 – SethMMorton

+0

デビッドは私のためにうまくやった。 – thebigdog

+0

あなたはそれを推薦しない理由を説明できますか?かなり良い回避策のようです。 – rottweiler

1

をfile2をインポートすることができます

しかし、それは再帰的ではなく、あなたがipythonを使用しているとき、私はあなたの欲求がよく答えると信じています。here

関連する問題