我發現我的家釀%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 foo.bar, foo
來源
2016-10-03 17:18:27
jez
不要從這個問題的答案幫助你嗎? http://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module – skovorodkin
我不知道你的ipython重新加載的麻煩可能是由於.pyc文件掛起。試着把環境變量'export PYTHONDONTWRITEBYTECODE = 1'放進去,看看它是否能緩解問題。 – wim