2

私はIPythonで多くの開発を行っています。

In[3]: from mystuff import MyObject

次に、mystuff.py に多くの変更を加えます。名前空間を更新するために、私はしなければなりません

In[4]: reload(mystuff)
In[5]: from mystuff import MyObject

これを行うより良い方法はありますか?mystuff を直接参照して MyObject をインポートできないことに注意してください

In[6]: import mystuff
In[7]: mystuff.MyObject

それはコード内での動作ではないためです。さらに良いのは、ファイルを書き込むときに IPythonにこれを自動的に実行させることです (ただし、それはおそらく別の機会に質問します)。

どんな助けでも感謝します。

4

3 に答える 3

3

deep_reloadこれを行うには、IPythonの機能を使用できます。

http://ipython.scipy.org/doc/manual/html/interactive/reference.html?highlight=dreload

パラメータを指定して ipython を実行すると-deep_reload、通常のreload()方法が置き換えられます。

それでもうまくいかない場合は、スコープ内のインポートされたすべてのモジュールを自動的に置き換えるスクリプトを作成することができます。かなりハックですが、うまくいくはずです;)

私はちょうどipy_autoreloadモジュールを見つけました。おそらくそれはあなたを少し助けることができます。それがどのように機能するかはまだわかりませんが、これはドキュメントに従って機能するはずです:

import ipy_autoreload
%autoreload 1
于 2010-07-21T19:24:51.113 に答える
0

%run マジックを使用して、編集中のファイルの内容をインポートしてみてください。これを使用してファイルからオブジェクトをインポートすると、実行するたびにそれらのオブジェクトが更新されます。この方法では、キャリッジ リターンのたびに自動リロードされません。

于 2014-11-13T17:44:05.943 に答える
0

オブジェクトがクラスまたは関数の場合、その__module__属性を使用して、再ロードするモジュールを決定できます。

def reload_for(obj):
    module = reload(__import__(obj.__module__, fromlist=True))
    return getattr(module, obj.__name__)

MyClass = reload_for(MyClass)
于 2010-07-21T19:22:55.527 に答える