如何定义要从IPython的提示调用的自定义函数?

时间:2012-05-14 15:34:01

标签: configuration ipython

我有一个旧的ipy_user_conf.py,其中我将一个简单的函数包含在用户命名空间中,如下所示:

import IPython.ipapi
ip = IPython.ipapi.get()

def myfunc():
   ...

ip.user_ns['myfunc'] = myfunc

然后,我可以在提示符中使用myfunc。

但是,我更新到IPython 0.12.1,现在ip_user_conf.py不起作用。我还没有看到如何将提示的自定义函数转换为新的配置模型。

这样做的方法是什么?

祝你好运, 曼努埃尔。

更新:将主题更改为问题

1 个答案:

答案 0 :(得分:2)

在阅读了一些文档(并查看了潜在客户的源代码)后,我找到了解决此问题的方法。

现在,您应该将所有自定义函数移动到.ipython目录中的模块。由于我正在做的是一个简单的函数,它返回当前目录的git分支和状态,我创建了一个名为gitprompt.py的文件,然后我在exec_file配置选项中包含了文件名:

c.InteractiveShellApp.exec_files = [b'gitprompt.py']

此类文件中的所有定义都放在用户名称空间中。所以现在我可以在我的提示中使用它:

# Input prompt.  '\#' will be transformed to the prompt number
c.PromptManager.in_template = br'{color.Green}\# {color.LightBlue}~\u{color.Green}:\w{color.LightBlue} {git_branch_and_st} \$\n>>> '

# Continuation prompt.
c.PromptManager.in2_template = br'... '

请注意,为了使函数表现如此(即每次打印提示时调用),您需要使用IPython.core.prompts.LazyEvaluation类。您可以将它用作功能的装饰器。 gitprompt.py已作为要点放在公共领域:https://gist.github.com/2719419