簡體   English   中英

如何讓IPython 5與SublimeREPL一起使用?

[英]How do I get IPython 5 to work with SublimeREPL?

我跟着(實際上,我寫了) 這個gist中的指令,以修改ipy_repl.py附帶的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年二月初后的某個時刻, prompt_toolkit模塊應運而生使用jupyter_console 雖然我認為這給整個項目帶來了一些好處,但一個缺點是與jupyter_console通信的所有文本接口必須是TTY(一個相當愚蠢的要求,IMO),Sublime視圖不是。

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

通過偶然的一系列事件,我遇到了一個我幾個月沒用過的舊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的新功能,但它總是更適合一直盯着追蹤。 我已經更新了在問題中提到的要點 ,以反映這一發現,並希望在此發布此問答以獲取消息,但我仍在尋找一種讓IPython 5正常工作的方法。

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

我也一樣,我解決了,我也在這里回答了這個問題。

有兩種方法可以實現,win10,conda python3.6.7,Ipython7.1.1,Sublime 3.1.1

1.打開\\ Packages \\ SublimeREPL \\ config \\ Python \\ Main.sublime-menu ,找到該行

"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的快捷方式不起作用(發生在我身上:(),請嘗試第二種方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM