6

我有以下内容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 脚本时,自动重载魔法不再起作用。

例如,在shell.py

from IPython import embed
embed()

这仍然会加载我的 ipython_config.py,"Test autoreload"打印出来就证明了这一点,但是 autoreload 扩展没有被加载(没有 %autoreload 魔法):

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

2 回答 2

3

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

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

于 2013-08-15T22:22:35.493 回答
2

代替

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]: 
于 2015-04-02T11:25:03.533 回答