如何在ipythonsh中手动重新加载文件

2024-04-24 19:51:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件叫做副总裁,我希望能够从ipythonshell调用其中的函数。不过,iPython的autoreload功能并不是很好。有时它能检测到变化,有时却检测不到

我不想调试autoreload,而是想知道是否有一种方法可以在iPython中手动重新加载、卸载和加载模块。目前我终止shell,重新启动它,重新导入我的模块,然后从那里开始。如果能够在不杀死iPython shell的情况下进行手动重新装载,那将是非常棒的。在


Tags: 模块文件方法函数功能ipython情况手动
1条回答
网友
1楼 · 发布于 2024-04-24 19:51:15

我发现我的自制^{cd1>}在这方面非常有用:

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)

一旦发现问题,当涉及到包的子模块时,必须^{cd2>}子模块,然后然后顶级包:

^{pr2}$

相关问题 更多 >