如何在Jupyter Notebook中实现自动完成而不使用Tab键?

163

我希望在笔记本中获得自动完成功能,即当我输入时,会出现一个下拉菜单,显示所有可能想要输入的内容,而不需要按Tab键。有这样的功能吗?

我尝试了:

%config IPCompleter.greedy=True

但这需要按Tab键。

8个回答

131

有一个名为 Hinterland 的扩展程序可用于 Jupyter,它在打字时自动显示下拉菜单。还有其他一些有用的扩展程序。

要安装扩展程序,您可以按照此 Github 存储库 上的指南进行操作。为了轻松激活扩展程序,您可能需要使用 扩展程序配置器


3
如果我正在使用运行Jupyter Notebook的远程机器,并通过浏览器从本地机器上使用它,那么我应该在哪里安装扩展? - thebeancounter
2
@thebeancounter 我只在本地安装了这个扩展,也就是我通过浏览器访问笔记本的机器上。我没有在运行jupyter笔记本的远程机器上安装任何扩展。 - physicsGuy
6
我已经安装了 Hinterland,它只能自动完成基本的 Python 代码,但无法自动完成模块函数(例如 pd、np 等等),我该如何才能让它像 PyCharm 一样自动完成这些函数? - thebeancounter
@thebeancounter 对我来说,hinterland可以与像numpy和pandas这样的模块一起使用。即使我进行相对导入import numpy as np并键入np,也会出现建议(例如np.abs)。要解决此问题,需要更多有关您设置的详细信息。我建议为您的问题打开单独的问题。 - physicsGuy
2
对于像我一样不熟悉Jupyter Notebook的人, 1)请按照官方说明安装这些内容:https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/install.html 2)安装浏览器配置UI,请参考:https://github.com/Jupyter-contrib/jupyter_nbextensions_configurator 3)使用终端中的命令打开jupyter笔记本:jupyter notebook - Jason

66

即使使用了hinterland扩展,Jupyter Notebook自动补全功能也很弱。感谢基于深度学习的代码自动补全的想法。我开发了一个基于TabNine的Jupyter Notebook扩展程序,它提供基于深度学习的代码自动补全。这是我的工作的Github链接:jupyter-tabnine

现在它已经在pypi索引上发布了。只需执行以下命令,就可以享受它的便利:)

pip3 install jupyter-tabnine
jupyter nbextension install --py jupyter_tabnine
jupyter nbextension enable --py jupyter_tabnine
jupyter serverextension enable --py jupyter_tabnine

demo


1
@Harvey 你好,我阻止了第一个“Enter”以避免误操作。如果提示窗口显示,第一个“Enter”将触发关闭窗口。目前,如果您想在提示显示时换行,只需按下“Enter”,然后再按下“Enter”(或者如果您想执行当前单元并创建一个新单元,则按下“Shift”+“Enter”)。我不确定这是否是一个好的设计。请告诉我您的感受和建议。 - Wenmin Wu
在我的笔记本电脑键盘上,´fn´ + ´Enter´ 可以使用。我已经习惯了这种方式。预期的行为是在单元格中按 Alt+Enter 换行,按 Shift+Enter 执行。无论如何,考虑到这个插件有多么有用,这只是小问题。谢谢! - Hrvoje
2
如果在尝试安装jupyter时出现“Permission denied”错误,只需在jupyter安装命令中添加“--user”即可。 - fytao
4
还有一个友好的提醒:TabNine 可能会占用大量内存和 CPU 资源。我运行的是来自 WSL(Ubuntu 18.04) 的 jupyter notebook,TabNine 占用了约1.5GB内存。如果您从任务管理器结束任务,则使用的内存可以降至约200MB,并且下次在 jupyter notebook 中键入时,TabNine 将自动启动。更多详细信息请参见 https://github.com/zxqfl/TabNine/issues/43。 - fytao
我尝试过,但下拉菜单的显示效果不如Hinterland好,所以我又回去了。 - SledgeHammer
显示剩余2条评论

30

我建议使用hinterland扩展。

在其他答案中,我无法找到从pip安装它的方法,因此这是您安装它的方法。

首先,运行以下命令安装jupyter contrib nbextensions:

pip install jupyter_contrib_nbextensions

接下来,通过运行以下命令为jupyter安装js和css文件:

jupyter contrib nbextension install --user

最后,运行以下命令:

jupyter nbextension enable hinterland/hinterland

最后一个命令的输出将会是:

Enabling notebook extension hinterland/hinterland...
      - Validating: OK

18

如@physicsGuy所述,您可以使用hinterland扩展程序。执行以下简单步骤即可:

使用conda forge渠道安装nbextension。只需在conda终端中运行以下命令:

conda install -c conda-forge jupyter_nbextensions_configurator

下一步是启用内陆扩展。在conda终端中运行以下命令:

jupyter nbextension enable hinterland/hinterland

搞定了,完成了。


10
启用笔记本扩展 hinterland/hinterland...
  • 验证中:发现了问题:
    • require? X hinterland/hinterland
这是执行此操作时出现的错误。
- Darshu Bc
1
运行以下两个命令 jupyter contrib nbextension install --systemjupyter contrib nbextension install --user 然后再运行以下命令查看列表 jupyter nbextension list - PiotrK

8

我正在使用Jupiter Notebook 5.6.0。在这里,为了得到自动建议,我只需要在输入至少一个字符后按Tab键。

 **Example:** Enter character `p` and hit Tab.

要获取导入库中的方法和属性,请与Alice一样使用相同的Tab键。
  import numpy as np

  np. --> Hit Tab key

他想要一个不使用Tab键的解决方案。 - Mourad BENKDOUR

7

如果你在这样导入numpy或pandas的包之后不执行%config IPCompleter.greedy=True操作; import numpy as np import pandas as pd.

那么当你输入pd.并按下tab键时,它会展示出所有可能用到的方法,非常容易和直接。


他想要一个不使用Tab键的解决方案。 - Mourad BENKDOUR

1
请将以下内容添加到您在Jupyter Lab上的键盘用户首选项中(设置->高级系统编辑器):
{
    "shortcuts":[
        {
            "command": "completer:invoke-file",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-FileEditor .jp-mod-completer-enabled"
        },
        {
            "command": "completer:invoke-file",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-FileEditor .jp-mod-completer-enabled"
        },
        {
            "command": "completer:invoke-notebook",
            "keys": [
                "Ctrl Space"
            ],
            "selector": ".jp-Notebook.jp-mod-editMode .jp-mod-completer-enabled"
        }

    ]
}

1
注意:此问题涉及Jupyter Notebook。对于JupyterLab,已经有另一个问题 在你的回答之前就被创建了,你的答案可能更适用于那里。虽然我必须说,这不是我期望的答案,但从技术上讲是正确的-不能在这里使用制表符 ;) - krassowski

0
如果你正在使用Jupyter Lab,你可以简单地进入设置 -> 代码补全 -> 启用自动补全。这将产生与Hinterland相同的效果,而无需安装任何扩展。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接