変更されたすべてのコードを IPython に自動的にリロードさせる方法はありますか? 各行がシェルで実行される前、または具体的に要求されたときに失敗します。私は IPython と SciPy を使用して多くの探索的プログラミングを行っていますが、変更するたびに各モジュールを手動でリロードする必要があるのは非常に面倒です。
6 に答える
IPythonバージョン3.1、4.x、および5.xの場合
%load_ext autoreload
%autoreload 2
その後、モジュールはデフォルトで自動リロードされます。これはドキュメントです:
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
前述のとおり、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 で動作します
改訂-IPythonが更新されたため、以下のAndrew_1510の回答を参照してください。
..。
ほこりっぽいバグレポートからそこにたどり着く方法を理解するのは少し難しいですが、:
現在IPythonに同梱されています!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
...その後、電話をかけるたびにyour_mod.dwim()
、最新バージョンが取得されます。
以下のような行でファイルipython_config.pyを ~/.ipython/profile_default ディレクトリに追加すると、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')
以下を使用できます。
import ipy_autoreload
%autoreload 2
%aimport your_mod
そのための拡張機能がありますが、私はまだ使用経験がありません:
http://ipython.scipy.org/ipython/ipython/attachment/ticket/154/ipy_autoreload.py