web-dev-qa-db-ja.com

IPythonでのモジュールの自動リロード

変更されたすべてのコードをIPythonに自動的にリロードさせる方法はありますか?各行がシェルで実行される前、または特に要求されたときに失敗する前。 IPythonとSciPyを使用して多くの探索的プログラミングを行っていますが、変更するたびに各モジュールを手動でリロードしなければならないのは非常に苦痛です。

142
Thomas Parslow

IPythonバージョン3.1、4.x、および5.xの場合

%load_ext autoreload
%autoreload 2

モジュールはデフォルトでauto-reloadedになります。これはドキュメントです:

File:       ...my/python/path/lib/python2.7/site-packages/IPython/extensions/autoreload.py

Docstring:
``autoreload`` is an IPython extension that reloads modules
automatically before executing the line of code typed.

This makes for example the following workflow possible:

.. sourcecode:: ipython

   In [1]: %load_ext autoreload

   In [2]: %autoreload 2

   In [3]: from foo import some_function

   In [4]: some_function()
   Out[4]: 42

   In [5]: # open foo.py in an editor and change some_function to return 43

   In [6]: some_function()
   Out[6]: 43

The module was reloaded without reloading it explicitly, and the
object imported with ``from foo import ...`` was also updated.

トリックがあります:ipythonを使用する場合、上記のすべてを忘れるの場合は、次を試してください。

import autoreload
?autoreload
# Then you get all the above
220
Andrew_1510

上記のように、autoreload拡張機能が必要です。 ipythonを起動するたびに自動的に起動するようにするには、ipython_config.py起動ファイルに追加する必要があります。

最初に生成する必要がある場合があります。

ipython profile create

次に、これらの行を~/.ipython/profile_default/ipython_config.pyに含めます。

c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')

.pycファイル内のコンパイルされたPythonコードを利用する必要がある場合のオプションの警告と同様に:

c.InteractiveShellApp.exec_lines.append('print "Warning: disable autoreload in ipython_config.py to improve performance." ')

編集:上記はバージョン0.12.1と0.13で動作します

86
kara deniz

改訂-IPythonが更新されたため、Andrew_1510の answer を参照してください。

...

ほこりっぽいバグレポートからそこに到達する方法を理解するのは少し困難でしたが、

IPythonに同梱されています!

import ipy_autoreload
%autoreload 2
%aimport your_mod

# %autoreload? for help

... your_mod.dwim()を呼び出すたびに、最新バージョンが取得されます。

65
Mike McCabe

以下のような行で〜/ .ipython/profile_defaultディレクトリにipython_config.pyを追加すると、ipythonの起動時に自動リロード機能がロードされます(2.0.0でテスト済み):

print "--------->>>>>>>> ENABLE AUTORELOAD <<<<<<<<<------------"

c = get_config()
c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines.append('%load_ext autoreload')
c.InteractiveShellApp.exec_lines.append('%autoreload 2')
9
lowtech

次を使用できます。

  import ipy_autoreload
  %autoreload 2 
  %aimport your_mod
2
dongweiming

そのための拡張機能がありますが、私はまだ使用経験がありません:

http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py

1
miku