在VS Code中使用IPython REPL



使用Visual Studio Code的Python扩展,我可以选择一些代码,右键单击它,然后选择"在Python终端中运行选择/行"(或者,我可以按Shift+Enter(。但是,这会将所选代码发送到终端窗格中的普通旧Python REPL,而我希望此代码在IPython中运行(不是QtConsole,只是基于终端的IPython(。

是否可以将IPython设置为默认REPL?我尝试将/usr/local/bin/ipython3设置为我的默认 Python 环境,但这不起作用(它仍然执行普通的 Python 解释器(。FWIW,我在macOS上。

添加以下设置(首选项:打开设置 JSON;或首选项 -> 设置 -> 搜索launchArgs-> 在 JSON 中编辑(无需任何扩展名即可工作。它还修复了无法将多行发送到 Python 的问题。

"python.terminal.launchArgs": [
"-c",
""import subprocess; subprocess.call(['ipython', '--no-autoindent'])""
],

更新(2020-12-27(:以下设置似乎效果更好,因为它支持Ctrl + C键盘中断,而无需现有的IPython:

"python.terminal.launchArgs": [
"-m",
"IPython",
"--no-autoindent",
],

在终端窗口中键入 Ipython。然后从编辑器窗口中选择要运行的行,然后单击VScode窗口顶部的终端菜单。终端菜单中的一个选项是"运行所选文本"。这将在 Ipython 终端窗口中运行。我不知道如何将其设置为默认值,但除非停止 Ipython,否则它似乎会保持该状态。注意:您必须使用菜单项运行您的选择。在编辑器窗口中单击鼠标右键并单击"运行选择"将不使用 Ipython 窗口。我希望这是清楚的。如果不是,请发表评论。

使用 "IPython for VSCode" 插件。

安装它,然后使用Send Select Text (or current line) To IPython

如果要使用原始shift+enter的快捷方式设置来执行上面的命令,请使用以下方法之一

快捷方式设置 - 正常

  1. 打开快捷方式设置:Macos 它cmd+k cmd+s.

  2. 上面的搜索命令,然后右键单击以修改键盘绑定为shift+enter

  3. 接下来,再次右键单击以将When expression修改为:

editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'
  1. 右键单击并选择show same key bindings

  2. 找到命令Python: Run Selection/Line in Python Terminal并右键单击以禁用它。

快捷方式设置 - JSON

打开
  1. 快捷方式设置,点击右上角打开JSON配置

  2. 附加以下设置:

{
"key": "shift+enter",
"command": "ipython.sendSelectedToIPython",
"when": "editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'"
},
{
"key": "shift+enter",
"command": "-python.execSelectionInTerminal",
"when": "editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'"
}

我从标准Python REPL内部启动IPython,该REPL由Shift-Enter生成

import IPython
IPython.embed()

请参阅 IPython 文档。

您还可以在settings.json中设置"python.pythonPath",如下所示:

{
"python.pythonPath": "~/miniconda3/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}

{
"python.pythonPath": "~/miniconda3/envs/<yourEnv>/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}

然后shift+enter将触发ipython并将线路发送到终端。

IPython支持由"IPython for VSCode"插件提供。

只需选择文本并在命令面板中调用"将所选文本(或当前行(发送到 IPython"。

此外,官方Microsoft Python插件现在支持交互式Jupiter窗口,具有类似的功能。

如果你在VSCode中默认安装了Python扩展,默认情况下你可以突出显示python代码,并执行"SHIFT+ENTER"以"在Python终端中运行选择/行"。

该命令将使用默认的python.exe解释器。但是,这是我使用 IPython shell 的技巧。

  1. 首先通过突出显示它并执行 SHIFT+ENTER 来运行一行虚拟的 python 代码。这将启动一个名为"python"的终端,并启动python shell以运行REPL中的代码。
  2. 现在在该 python shell 中发出exit()以返回到常规终端提示符。
  3. 在该终端中运行ipython以启动IPython REPL的位置,而以前的Python REPL曾经是。

现在,SHIFT+ENTER(突出显示单行或多行(的后续使用将在IPython shell中运行代码。

(注意,如果 SHIFT+ENTER 将代码发送到 Python 交互式拆分窗口而不是终端 REPL,请确保您的settings.json具有"jupyter.sendSelectionToInteractiveWindow": false,(

[编辑]。关于此线程的各种评论指出,使用各种解决方案,代码被复制到 IPython 终端,但不运行。我意识到我也有这种经验,这取决于我活跃的 conda 环境。如果我在我使用的环境中执行conda install -c conda-forge prompt-toolkit,我会得到 SHIFT+ENTER 实际运行代码的预期行为。我不知道该包是密钥还是它的依赖项之一,或者只是使用 conda-forge。但它有效!

最新更新