iPython Code Completion / Intellisense on Dot Possible?

PythonIpython

Python Problem Overview


As someone trying to learn the ins and outs of Python (with emphasis on scientific computing - ie: pandas, numpy, scikit-learn), most of the gurus out there seem to recommend and use iPython notebooks. My biggest sticking point as a beginner/intermediate coder is that I NEED code completion / intellisense -like functionality from an IDE to learn the function parameters. I'm not hard-wired yet to just know what parameters are available at my current development.

In iPython, I noticed I can press Tab to show the drop-down of options (seen below as pd.) but I don't want to have to hit each time. That's not user-friendly for my needs. Instead, I would like it to show only available classes and methods when I press dot.

Secondly, I notice that if I did say pd.read_csv(<TAB>, I get a lot more options than are the actual parameters in read_csv.

Question: Can iPython automatically show accurate code completion options instantly after pressing dot / period? Also, is there a way to configure it to only show the available function parameters when within a function?

To make this question super-specific, I'm not asking about using any other IDE; I'm asking very specifically in regards to just iPython and wondering if there's a way to set some kind of configuration to achieve accurate "dot" display options instantly when pressing "dot" (no time delay).

enter image description here

Example below shows Desktop which is obviously not a parameter of pd.read_csv().

enter image description here

Python Solutions


Solution 1 - Python

You can press <Shift>-<Tab> to get a tooltip showing the function's signature:

enter image description here

Alternatively, invoking zip? opens a documentation pane at the bottom of the window.

As far as having the tooltip open automatically, I'm unsure. I'd guess that it isn't possible via configuration.

Solution 2 - Python

Almost 3 years later, I've finally come across a potential solution.

Answer: Install nbextensions and enable the Hinterland extension.

> Enable code autocompletion menu for every keypress in a code cell, > instead of only calling it with tab.

Here's what you do:

  1. pip install jupyter_contrib_nbextensions
  2. jupyter contrib nbextension install --user
  3. Start jupyter notebook (browser launches)
  4. One of the tabs should now show "Nbextensions"
  5. There, you will find "Hinterland". Check the box to enable.

Hinterland has some adjustable options like:

  • hinterland.hint_delay: delay in milliseconds between keypress & hint request.
  • hinterland.enable_at_start: Whether to enable hinterland's continuous hinting when notebook is first opened, or if false, only when selected from the help-menu item.
  • hinterland.hint_inside_comments: Whether to request hints while typing code comments. Defaults to false.
  • Other regex options: hinterland.exclude_regexp, hinterland.include_regexp, hinterland.tooltip_regexp

enter image description here

Solution 3 - Python

Now there's a better way to get accurate code completion operation. It can be triggered by any character you typed. Inspired by TabNine, I developed a code auto-completion extension for Jupyter Notebook Jupyter TabNine.

It's available on pypi index now. Simply issue following commands, then enjoy it:)

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

demo

Solution 4 - Python

This is what worked for me:

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

To see the Nbextensions tab if something has hidden it:

jupyter nbextensions_configurator enable --user
  • under Nbextensions uncheck "disable confirguration for nbextensions without explicit compatibility ..." (disclaimer - all risks are yours for doing this)
  • select only
    • "Hinterland" for the formatting ones. I had some other nbextensions selected and somehow it was not working.
    • "Nbextension edit menu item" & "Nbestenision dashboard tab" (in order to see this tab again next time)

enter image description here

Solution 5 - Python

If you are using Jupyter notebook and your Intellisense is not working then type below and give a press TAB after (.)

%config IPCompleter.greedy=True

it will work for you as well.

Solution 6 - Python

If you are using JupyterLab, the jupyterlab-lsp extension (with pyls server installed) does invoke the completer automatically upon typing the dot (or any character if told so):

enter image description here

Pros:

  • completion suggestions are available even before the code gets executed (static analysis)
  • documentation panel can be displayed for the completion candidates
  • type icons (with different themes available)
  • other IDE features included (signature hints, diagnostics, rename, etc)

Cons:

  • not yet as configurable as Hinterland (but it is getting there)
  • some users prefer to only get completions for objects in already executed cells

Assuming Python 3.6+ and JupyterLab 3.0+ are already installed:

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

For more detailed and up-to-date installation instructions please see this link.

Disclaimer: I am one of the authors of this extension.

Solution 7 - Python

For Mac in JupyterLab just press tab

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJaradView Question on Stackoverflow
Solution 1 - PythonjmeView Answer on Stackoverflow
Solution 2 - PythonJaradView Answer on Stackoverflow
Solution 3 - PythonWenmin WuView Answer on Stackoverflow
Solution 4 - PythonVityataView Answer on Stackoverflow
Solution 5 - PythonDIGVIJAY SINGHView Answer on Stackoverflow
Solution 6 - PythonkrassowskiView Answer on Stackoverflow
Solution 7 - PythoniHermesView Answer on Stackoverflow