在使用嵌入式shell时,如何让IPython自动加载魔法自动加载?

时间:2013-08-15 17:03:20

标签: python ipython

我的ipython_config.py中有以下内容:

print "Test autoreload" #confirm this gets loaded
c = get_config()
c.InteractiveShellApp.extensions = ['autoreload']
c.InteractiveShellApp.exec_lines = ['%autoreload 2']

它似乎适用于正常的ipython会话:

$ ipython
Test autoreload
In [1]: %autoreload 2
In [2]: 

但是,当使用使用IPython.embed()的嵌入式shell脚本时,autoreload magic不再有效。

例如,在shell.py

from IPython import embed
embed()

这仍然加载我的ipython_config.py,由"Test autoreload"打印出来证明,但是自动加载扩展没有加载(没有%autoreload magic):

$ python shell.py
Test autoreload
In [1]: %autoreload 2
ERROR: Line magic function `%autoreload` not found.

2 个答案:

答案 0 :(得分:2)

据我所知,这是一个(known)错误。只有在有应用程序的情况下才会加载扩展,因此在使用嵌入时,它不会被加载(尽管读取了配置)。

github上有open issue来解决这个问题,但它从未实现过。

答案 1 :(得分:0)

而不是

from IPython import embed
embed()

使用此

from IPython.frontend.terminal.ipapp import TerminalIPythonApp
app = TerminalIPythonApp.instance()
app.initialize(argv=[])
app.start()

您可以运行python shell.py

In [1]: %autoreload 2

In [2]: