有没有办法让 IPython 自动重新加载所有更改的代码?在每行在 shell 中执行之前或在特别要求时失败。我正在使用 IPython 和 SciPy 进行大量探索性编程,每当我更改每个模块时都必须手动重新加载它是一件很痛苦的事情。
问问题
194328 次
6 回答
426
对于 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
于 2012-05-06T17:37:38.413 回答
111
如上所述,您需要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
于 2012-12-19T21:16:34.550 回答
68
已修订 - 请参阅下面的 Andrew_1510 的答案,因为 IPython 已更新。
...
从尘土飞扬的错误报告中弄清楚如何到达那里有点困难,但是:
它现在随 IPython 一起提供!
import ipy_autoreload
%autoreload 2
%aimport your_mod
# %autoreload? for help
...然后每次调用时your_mod.dwim()
,它都会获取最新版本。
于 2011-01-22T00:12:08.500 回答
14
如果您将文件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')
于 2014-05-21T19:55:20.790 回答
2
您可以使用:
import ipy_autoreload
%autoreload 2
%aimport your_mod
于 2013-05-23T15:03:18.727 回答
0
于 2009-12-15T15:06:47.217 回答