![](/img/trans.png)
[英]How do I make IPython reload a file passed to `ipython -i …`
[英]How to do manual reload of file in iPython shell
我有一个名为sub.py的文件,我希望能够从iPython shell调用其中的函数。 但是,iPython自动重载功能无法很好地运行。 有时它检测到更改,有时却检测不到。
而不是调试自动重新加载,我想知道是否存在一种方法可以手动重新加载或卸载和加载iPython中的模块。 目前,我终止外壳程序,重新启动它,重新导入我的模块,然后从那里开始。 能够进行手动重新加载而不会杀死iPython shell真是太好了。
我发现自制的%reimport
在这种情况下非常有用:
def makemagic(f):
name = f.__name__
if name.startswith('magic_'): name = name[6:]
def wrapped(throwaway, *pargs, **kwargs): return f(*pargs,**kwargs)
if hasattr(f, '__doc__'): wrapped.__doc__ = f.__doc__
get_ipython().define_magic(name, wrapped)
return f
@makemagic
def magic_reimport(dd):
"""
The syntax
%reimport foo, bar.*
is a shortcut for the following:
import foo; foo = reload(foo)
import bar; bar = reload(bar); from bar import *
"""
ipython = get_ipython().user_ns
for d in dd.replace(',', ' ').split(' '):
if len(d):
bare = d.endswith('.*')
if bare: d = d[:-2]
exec('import xx; xx = reload(xx)'.replace('xx', d), ipython)
if bare: exec('from xx import *'.replace('xx', d), ipython)
一旦了解了这一点,当涉及到包的子模块时,您必须reimport
该子模块, 然后再 reimport
顶级包:
reimport foo.bar, foo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.