How do I add tab completion to the Python shell?
Asked Answered
T

8

143

When starting a django application using python manage.py shell, I get an InteractiveConsole shell - I can use tab completion, etc.

Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

When just starting a python interpreter using python, it doesn't offer tab completion.

Can someone tell me what django is doing to give me an interactive console, or what I need to do to start an interactive console without a django app?

Thornhill answered 29/10, 2008 at 13:9 Comment(3)
When you type in python, you get a >>> prompt, right? That's the interactive shell. What's your question?Aged
It doesn't offer tab completion. That is the problem.Thornhill
Please update your question to specify that.Prussian
T
235

I may have found a way to do it.

Create a file .pythonrc

# ~/.pythonrc
# enable syntax completion
try:
    import readline
except ImportError:
    print("Module readline not available.")
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

then in your .bashrc file, add

export PYTHONSTARTUP=~/.pythonrc

That seems to work.

Thornhill answered 29/10, 2008 at 13:24 Comment(5)
this works for Jython where IPython and bpython are not currently available.Voidable
For some reason, the above worked for me in my old mac with "mountain lion" but not working for new mac with "el captan". I need to source ~/.bashrc everytime to make it work before starting python interpreter. Any tips?Nicolella
@hmi Try unifying your .bashrc and .bash_profile as suggested at the bottom of this page: joshstaiger.org/archives/2005/07/bash_profile_vs.html It also provides information on the difference between them. It might not solve the issue, but it might help.Alverson
@hmi Try putting it in /etc/bashrc, instead of ~/.bashrc.Enslave
Just for reference - I've probably come back to this answer more times than any other on StackOverflow, so thanks.Jann
S
35

I think django does something like https://docs.python.org/library/rlcompleter.html

If you want to have a really good interactive interpreter have a look at IPython.

Semiweekly answered 29/10, 2008 at 13:21 Comment(0)
P
25

For the record, this is covered in the tutorial: http://docs.python.org/tutorial/interactive.html

Proteiform answered 29/10, 2008 at 16:39 Comment(1)
Link only answers are not encouraged, please expand your answerGuerra
H
14

I use ptpython - it is a wonderful tool autocomplete shell cmd.

Installing ptpython is very easy, use pip tool

pip install ptpython

and for django shell, you should import the django env, like this

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testweb.settings")

Trust me, this is the best way for you!!!

Huss answered 21/8, 2015 at 8:11 Comment(0)
D
8

Fix for Windows 10 shell:

pip install pyreadline3  # previously, pyreadline but that package was abandoned
pip install ipython
Destefano answered 5/3, 2019 at 21:42 Comment(0)
W
1

In Python3 this feature is enabled by default. My system didn't have the module readline installed. I am on Manjaro. I didn't face this tab completion issue on other linux distributions (elementary, ubuntu, mint).

After pip installing the module, while importing, it was throwing the following error-

ImportError: libncursesw.so.5: cannot open shared object file: No such file or directory

To solve this, I ran-

cd /usr/lib ln -s libncursesw.so libncursesw.so.5

This resolved the import error. And, it also brought the tab completion in the python repl without any creation/changes of .pythonrc and .bashrc.

Walkabout answered 2/7, 2017 at 19:44 Comment(0)
O
0

Yes. It's built in to 3.6.

fernanr@gnuruwi ~ $ python3.6
Python 3.6.3 (default, Apr 10 2019, 14:37:36)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.
Display all 318 possibilities? (y or n)
os.CLD_CONTINUED             os.O_RDONLY                  os.ST_NOEXEC                 os.environ                   os.getpid(                   os.readlink(                 os.spawnvpe(
os.CLD_DUMPED                os.O_RDWR                    os.ST_NOSUID                 os.environb                  os.getppid(                  os.readv(                    os.st
Orgel answered 11/2, 2020 at 7:9 Comment(2)
Hi what key did you press to get "Display all 318 possibilities? (y or n)". I tried 'tab' key it doesn't give me your auto-complete hint. I must be missing something simpleMotto
yes, tell how did it get autocomplete, which key or any setup needed, eager to know!Missi
O
-2

For older versions (2.x) above script works like charm :)

fernanr@crsatx4 ~ $ cat .bashrc | grep -i python
#Tab completion for python shell
export PYTHONSTARTUP=~/.pythonrc
fernanr@crsatx4 ~ $ . ~/.bashrc
fernanr@crsatx4 ~ $ echo $?
0
fernanr@crsatx4 ~ $ python2
Python 2.7.5 (default, Jun 11 2019, 14:33:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.
Display all 249 possibilities? (y or n)
os.EX_CANTCREAT             os.O_WRONLY                 
Orgel answered 11/2, 2020 at 7:16 Comment(2)
Your reply seems to be missing the content of "~/.pythonrc"Teriann
@Teriann I suspect it was intended to be shown below ashchristopher's answer ... not sure why it's an answer, though.Neufer

© 2022 - 2024 — McMap. All rights reserved.