2016-08-20 19 views
2

我遵循(實際上,我創作了)this gist中的說明,以便修改SublimeREPL附帶的ipy_repl.py文件,以便在當時使用更新版本的IPython。不過,我最近pip升級我的IPython和Jupyter包如何讓IPython 5與SublimeREPL一起使用?

pip3 install -U ipython jupyter 

到最新版本,並試圖開始從一個崇高的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),而崇高視圖不是。

我無法找到解決這個 錯誤 功能的方法。有誰知道如何解決這個問題?

回答

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以反映這一發現,並且想要發佈此Q & A在這裏說出來,但我仍在尋找一種讓IPython 5工作的方法。

+0

我不熟悉SublimeREPL,但是我們已經添加了一個'--simple-prompt '爲Emacs'劣質外殼'功能的用戶提供IPython標誌。也許SublimeREPL也是這樣工作的?這完全禁用了prompt_toolkit和readline。 –

+0

@ThomasK你知道如何以編程方式訪問?我不知道你是否看了一下'ipy_repl.py',但基本上它是建立到'ZMQTerminalIPythonApp'實例的連接,然後使用它與內核進行通信。你可以通過像'cfg.InteractiveShell.simple_prompt = True'這樣的機制來訪問'--simple-prompt'選項嗎? – MattDMo

+0

@ThomasK我翻看了IPython文檔,並使用了'cfg.TerminalInteractiveShell.simple_prompt = True',但仍然得到與我的問題完全相同的錯誤。我們已經設置了'os.environ ['TERM'] ='emacs''來獲得「劣質shell」行爲,所以我不知道還有什麼其他的辦法。 – MattDMo

1

我已經修改了你的要點,所以它可以與最新版本的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內核的連接文件不會被刪除 - 誰知道還有哪些內容繼續運行...