如何在传递自定义用户和横幅时启动ipython应用程序实例?

如何在传递自定义用户和横幅时启动ipython应用程序实例?,python,ipython,Python,Ipython,我正在尝试修复烧瓶中的脚本。Django曾经有一个插件,一位IPython开发人员建议使用TerminalIPythonApp而不是embed(),以便正确加载扩展。然而,django shell不允许像flask脚本那样定制横幅或名称空间 用户和banner通常被传递给shell的构造函数,但是TerminalIPythonApp类实例化它自己的shell,而不公开任何可能允许我们传递shell init参数的kwargs 我已经提出了以下解决方案,不过这有点令人讨厌。有更好的办法吗 from

我正在尝试修复烧瓶中的脚本。Django曾经有一个插件,一位IPython开发人员建议使用TerminalIPythonApp而不是embed(),以便正确加载扩展。然而,django shell不允许像flask脚本那样定制横幅或名称空间

用户和banner通常被传递给shell的构造函数,但是TerminalIPythonApp类实例化它自己的shell,而不公开任何可能允许我们传递shell init参数的kwargs

我已经提出了以下解决方案,不过这有点令人讨厌。有更好的办法吗

from IPython.terminal import ipapp
app = ipapp.TerminalIPythonApp.instance()
shell = ipapp.TerminalInteractiveShell.instance(
    parent=app,
    display_banner=False,
    profile_dir=app.profile_dir,
    ipython_dir=app.ipython_dir,
    user_ns=my_user_ns,
    banner1=my_banner)
shell.configurables.append(app)
app.shell = shell
# shell has already been initialized, so we have to monkeypatch
# app.init_shell() to act as no-op
app.init_shell = lambda: None
app.initialize(argv=[])
app.start()

在新的IPython 1.0版本中,有一个顶级的
IPython.start\u IPython()
函数来启动应用程序。这正是您想要的,但不幸的是,我们在1.0版中出现了错误,将
用户
传递到该版本目前没有任何效果。我们可能会在几周后发布一个bug修复版本,然后鼓励人们尽可能开始使用新功能。

@tututudaju
IPython.start\u IPython(user\u ns=somedict,argv=[])
应该可以在最新版本的IPython中使用。