首页 > 解决方案 > 如何使用 start_ipython() 配置 IPython 会话?

问题描述

我有一些代码可以使用start_ipython. 它接受config允许传入Config()对象的选项。

我可以做这样的事情:

c = Config()
c.InteractiveShellEmbed.colors = args.color
c.InteractiveShell.confirm_exit = args.confirmexit
c.InteractiveShell.prompts_class = MyPrompt
c.InteractiveShell.ast_node_interactivity = 'last_expr_or_assign'

IPython.start_ipython(config=c, user_ns=globals())

这会改变提示和显示行为。都好。

我还希望设置一些默认格式化程序。一旦我在 IPython 中,以下工作

plain = get_ipython().display_formatter.formatters['text/plain']
plain.for_type(np.float64, plain.lookup_by_type(float))

但我想在启动 IPython 之前进行设置。配置对象有一个DisplayFormatter属性,但我不明白如何配置它。

一个丑陋的解决方法是

code = [
    "plain = get_ipython().display_formatter.formatters['text/plain'];",
    "plain.for_type(np.float64, plain.lookup_by_type(float));",
    "precision('%.3g');"
       ]
c.InteractiveShellApp.exec_lines = code
IPython.start_ipython(config=c, user_ns=globals())

这可以解决问题,但 IPython 会话以

Out[1]: <function IPython.core.formatters.PlainTextFormatter._type_printers_default.<locals>.<lambda>(obj, p, cycle)>
Out[1]: "('%.3g');"

我不想看到(尽管行尾有分号)。

我想避免更改任何外部配置文件的需要,以便 IPython 为具有特定行为的用户开箱即用。

标签: ipython

解决方案


格式化程序类也是可配置的。

将类型传递给格式化程序 func dict 可能对您有用。请参阅https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-BaseFormatter.type_printers

PlainTextFormatter 还有一个设置精度的选项。参考 https://ipython.readthedocs.io/en/stable/config/options/terminal.html#configtrait-PlainTextFormatter.float_precision

更新#1:

c.PlainTextFormatter.float_precision = "%.3f"
c.BaseFormatter.type_printers = {np.float64: lambda obj, *args: str("%.3f" % obj)}

推荐阅读