如何让IPython 5与SublimeREPL一起使用?

时间:2016-08-20 20:09:47

标签: python ipython sublimetext jupyter sublimerepl

我跟随(实际上,我已创作)this gist中的说明,以修改SublimeREPL附带的ipy_repl.py文件,以使其能够使用更新版本的IPython当时。但是,我最近pip升级了我的IPython和Jupyter包

pip3 install -U ipython jupyter

到最新版本,现在我在尝试从Sublime启动IPython会话时遇到此错误:

Traceback (most recent call last):
  File "/home/mattdmo/.config/sublime-text-3/Packages/SublimeREPL/config/Python/ipy_repl.py", line 66, in <module>
    embedded_shell.initialize()
  File "<decorator-gen-113>", line 2, in initialize
  File "/usr/local/lib/python3.5/dist-packages/traitlets/config/application.py", line 74, in catch_config_error
    return method(app, *args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/jupyter_console/app.py", line 137, in initialize
    self.init_shell()
  File "/usr/local/lib/python3.5/dist-packages/jupyter_console/app.py", line 110, in init_shell
    client=self.kernel_client,
  File "/usr/local/lib/python3.5/dist-packages/traitlets/config/configurable.py", line 412, in instance
    inst = cls(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/jupyter_console/ptshell.py", line 252, in __init__
    self.init_prompt_toolkit_cli()
  File "/usr/local/lib/python3.5/dist-packages/jupyter_console/ptshell.py", line 404, in init_prompt_toolkit_cli
    self.pt_cli = CommandLineInterface(app, eventloop=self._eventloop)
  File "/usr/local/lib/python3.5/dist-packages/prompt_toolkit/interface.py", line 80, in __init__
    self.output = output or create_output()
  File "/usr/local/lib/python3.5/dist-packages/prompt_toolkit/shortcuts.py", line 124, in create_output
    ansi_colors_only=ansi_colors_only, term=term)
  File "/usr/local/lib/python3.5/dist-packages/prompt_toolkit/terminal/vt100_output.py", line 425, in from_pty
    assert stdout.isatty()
AssertionError

我做了一点挖掘,在2016年2月初之后的某个时刻,prompt_toolkit模块在​​jupyter_console中投入使用。虽然我认为这给整个项目带来了一些好处,但一个缺点是与jupyter_console通信的所有文本接口必须是TTY(一个相当愚蠢的要求,IMO),Sublime视图不是。

我无法找到解决此 bug 功能的方法。有谁知道如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

通过偶然的一系列事件,我遇到了一个我几个月没用过的旧Win7虚拟机,而且还没有升级过,所以IPython REPL仍然有用。通过一些实验,我发现如果我将ipython降级到版本4.1.1并将jupyter_console降级到4.1.0,那么一切正常:

pip3 install -U ipython==4.1.1 jupyter_console==4.1.0

这不是一个完美的解决方案,因为我无法使用IPython 5的新功能,但它绝对更适合一直盯着追踪。我已经更新了问题中提到的my gist以反映这一发现,并希望在此发布此问答,以便了解消息,但我仍在寻找让IPython 5正常运行的方法。

答案 1 :(得分:3)

我修改了你的要点,所以它适用于最新版本的Jupyter / IPython 6.1.0。

您只需要插入附加配置
cfg.ZMQTerminalInteractiveShell.simple_prompt = True
在第38和41行之间。

第68-73行的黑客攻击 if os.name == "nt":
在Win 7/10上我没有必要。如果您不对其进行评论,它只会显示两次横幅。

强制使用simple-prompt选项仅提供有限的shell功能(例如,没有多行输入) 可以使用IPython.terminal.ipapp.TerminalIPythonApp而不是jupyter_console.app.ZMQTerminalIPythonApp来使用IPython shell。但是,你失去了GUI事件循环集成(即%gui魔法)。

另外,在Sublime Text中关闭shell窗口时,我无法弄清楚如何正确退出Jupyter shell。如果不首先发出quit命令,则不会删除jupyter内核的连接文件 - 谁知道还有什么继续运行...

答案 2 :(得分:0)

我遇到了同样的问题,我解决了,我也回答了这个问题here

有两种制作方法,win10,conda python3.6.7,Ipython7.1.1,Sublime 3.1.1

1。打开\ Packages \ SublimeREPL \ config \ Python \ Main.sublime菜单,找到一行

"windows": ["python", "-u", "${packages}/SublimeREPL/config/Python/ipy_repl.py"]

并将其更改为您的ipython.exe所在的位置,对我来说就是

"windows": ["C:\Python\envs\py37\Scripts\ipython.exe"]

2。只需将\ Packages \ SublimeREPL \ config \ Python \ ipy_repl.py 修改为3行,

import os
# change dir to path_to_ipython.exe
os.chdir(r'C:\Python\envs\py37\Scripts')
os.system('ipython')

如果您遇到第一种方法的问题,例如您关于sublimeREPL的快捷方式不起作用(对我来说:(),请尝试第二种方法。),我更喜欢第二种方法。