【问题标题】:iPython Code Completion / Intellisense on Dot Possible?iPython 代码完成/Dot 上的 Intellisense 可能吗?
【发布时间】:2015-11-13 19:09:12
【问题描述】:

作为一个试图学习 Python 细节的人(重点是科学计算 - 即:pandas、numpy、scikit-learn),那里的大多数大师似乎都推荐和使用 iPython 笔记本。作为初学者/中级编码员,我最大的症结是我需要来自 IDE 的代码完成/类似智能感知的功能来学习函数参数。我还没有硬性地知道在我当前的开发中可以使用哪些参数。

在 iPython 中,我注意到我可以按 Tab 来显示选项下拉列表(如下所示 pd.),但我不想每次都点击。这对我的需求不友好。相反,我希望它在按点时仅显示可用的类和方法。

其次,我注意到如果我确实说pd.read_csv(<TAB>,我得到的选项比read_csv 中的实际参数要多得多。

问题:iPython 能否在按下点/句点后立即自动显示准确的代码补全选项?另外,有没有办法将其配置为仅在函数内显示可用的函数参数?

为了让这个问题更加具体,我不是在询问是否使用任何其他 IDE;我非常具体地询问 iPython,并想知道是否有办法设置某种配置以在按下“点”时立即实现准确的“点”显示选项(无时间延迟)。

下面的例子显示了Desktop,它显然不是pd.read_csv()的参数。

【问题讨论】:

  • 只是提到我正在研究的 JupyterLab 的完整 IntelliSense 解决方案:github.com/krassowski/jupyterlab-lsp(包括完成点和签名建议)。不确定这是否可以作为答案... - 我应该发布一个吗?
  • @krassowski 看起来是这个问题的潜在答案。 '.' 上的自动调用(点)是这个问题的主要痛点和目的。如果您认为您的库是一个解决方案,请随时在此问题的上下文中提供答案。

标签: python ipython


【解决方案1】:

您可以按<Shift>-<Tab> 获取显示函数签名的工具提示:

或者,调用 zip? 会在窗口底部打开一个文档窗格。

至于工具提示是否自动打开,我不确定。我猜想通过配置是不可能的。

【讨论】:

  • 这两个快捷方式都不显示任何关于类成员、函数参数或任何内容的提示。还有什么我应该安装才能启用的吗?
  • @tutuca 据我所知,这应该可以在不需要 jupyter 以外的任何包的情况下工作。我建议确保您安装了最新版本的 jupyter,并可能查看您的操作系统上的快捷方式是否不同。
  • 你说得对,我的图书馆没有重新加载,我只是打开和关闭笔记本,它就开始工作了。谢谢回复:)
  • 有没有办法在交互式 IPython shell 中访问此功能?
  • 恕我直言,“我不确定”和“我猜……”不回答问题,函数签名无关紧要。
【解决方案2】:

差不多 3 年后,我终于找到了一个潜在的解决方案。

答案:安装nbextensions并启用Hinterland扩展。

为代码单元格中的每个按键启用代码自动完成菜单, 而不是只用 tab 调用它。

这就是你要做的:

  1. pip install jupyter_contrib_nbextensions
  2. jupyter contrib nbextension install --user
  3. 启动jupyter notebook(浏览器启动)
  4. 其中一个标签现在应该显示“Nbextensions
  5. 在那里,您会找到“腹地”。选中复选框以启用。

Hinterland 有一些可调整的选项,例如:

  • hinterland.hint_delay:按键和提示请求之间的延迟(毫秒)。
  • hinterland.enable_at_start:是否在第一次打开笔记本时启用腹地的连续提示,或者如果为false,则仅在从帮助菜单项中选择时启用。
  • hinterland.hint_inside_cmets:是否在输入代码 cmets 时请求提示。默认为 false。
  • 其他正则表达式选项:hinterland.exclude_regexp、hinterland.include_regexp、hinterland.tooltip_regexp

【讨论】:

  • 感谢您的回答,刚刚解决了我的问题!
  • 如何在里面关闭自动补全?
  • 如果你在 conda 环境中安装它而不是 conda install -c conda-forge jupyter_contrib_nbextensions
【解决方案3】:

现在有更好的方法来获得准确的代码完成操作。它可以由您键入的任何字符触发。受 TabNine 的启发,我为 Jupyter Notebook Jupyter TabNine 开发了一个代码自动完成扩展。

现在在pypi index 上可用。只需发出以下命令,然后享受它:)

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

【讨论】:

【解决方案4】:

这对我有用:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter notebook

查看 Nbextensions 选项卡是否隐藏了它:

jupyter nbextensions_configurator enable --user
  • 在 Nbextensions 下取消选中“在没有明确兼容性的情况下禁用 nbextensions 的配置...”(免责声明 - 这样做的所有风险都由您承担)
  • 选择
    • “腹地”用于格式化。我选择了其他一些 nbextensions,但不知何故它不起作用。
    • “Nbextension 编辑菜单项”和“Nbestenision 仪表板选项卡”(以便下次再次看到此选项卡)

【讨论】:

    【解决方案5】:

    如果您使用的是 Jupyter 笔记本并且您的 Intellisense 无法正常工作,请在下方键入并在 (.) 之后按 TAB

    %config IPCompleter.greedy=True

    它也对你有用。

    【讨论】:

    • 我很难判断这是否回答了他们的问题,或者只是建议在 . 之后按 Tab 键(这是用户在他们的问题中明确希望避免的)。
    • 到目前为止,我们没有任何东西可以避免按 Tab。可能会在未来...
    【解决方案6】:

    对于JupyterLab 中的Mac,只需按tab

    【讨论】:

      【解决方案7】:

      如果您使用的是 JupyterLab,jupyterlab-lsp extension(安装了 pyls 服务器)会在输入点(或任何字符,如果被告知)时自动调用完成器:

      优点:

      • 甚至在代码执行之前就可以获得完成建议(静态分析)
      • 可以为完成候选显示文档面板
      • 类型图标(提供不同的主题)
      • 包括其他 IDE 功能(签名提示、诊断、重命名等)

      缺点:

      • 还没有像腹地那样可配置(但它正在到达那里)
      • 一些用户更喜欢只完成已执行单元格中的对象

      假设 Python 3.6+ 和 JupyterLab 3.0+ 已经安装:

      pip install jupyterlab-lsp    # client and server extension
      pip install jedi-language-server     # fast language server, or
      # pip install python-language-server[all]     # another language server
      

      如需更详细和最新的安装说明,请see this link

      免责声明:我是此扩展程序的作者之一。

      【讨论】:

      • 对于像我这样卡在python3.6上的人来说,上面的库支持的最高版本是:python -m pip install jedi-language-server==0.21.0 jedi==0.17.2 ipython==7.16.1
      猜你喜欢
      • 2021-11-06
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 2016-09-23
      • 2018-10-04
      • 1970-01-01
      • 2019-05-26
      • 2017-11-08
      相关资源
      最近更新 更多