141

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?

CharlesB
  • 86,532
  • 28
  • 194
  • 218
ashchristopher
  • 25,143
  • 18
  • 48
  • 49

8 Answers8

232

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.

chtenb
  • 14,924
  • 14
  • 78
  • 116
ashchristopher
  • 25,143
  • 18
  • 48
  • 49
  • 2
    this works for Jython where IPython and bpython are not currently available. – Skylar Saveland May 21 '14 at 23:29
  • 1
    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? – hi15 Oct 04 '16 at 15:30
  • 1
    @hmi Try unifying your `.bashrc` and `.bash_profile` as suggested at the bottom of this page: http://www.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. – Dangercrow Oct 21 '16 at 09:11
  • @hmi Try putting it in `/etc/bashrc`, instead of `~/.bashrc`. – voices Jan 18 '18 at 05:22
  • Just for reference - I've probably come back to this answer more times than any other on StackOverflow, so thanks. – timmins Apr 16 '19 at 20:31
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.

smbear
  • 1,007
  • 9
  • 17
Peter Hoffmann
  • 56,376
  • 15
  • 76
  • 59
27

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

Thomas Wouters
  • 130,178
  • 23
  • 148
  • 122
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!!!

MarianD
  • 13,096
  • 12
  • 42
  • 54
alan_wang
  • 785
  • 8
  • 9
8

Fix for Windows 10 shell:

pip install pyreadline3  # previously, pyreadline but that package was abandoned
pip install ipython
Mavaddat Javid
  • 491
  • 4
  • 19
Mr.B
  • 81
  • 1
  • 1
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.

TrigonaMinima
  • 1,828
  • 1
  • 23
  • 35
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
MarianD
  • 13,096
  • 12
  • 42
  • 54
  • 1
    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 simple – James H Mar 30 '21 at 02:34
  • yes, tell how did it get autocomplete, which key or any setup needed, eager to know! – jdk May 06 '22 at 04:28
-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                 
HK boy
  • 1,398
  • 11
  • 17
  • 25
  • Your reply seems to be missing the content of "~/.pythonrc" – MadMike May 12 '20 at 11:40
  • @MadMike I suspect it was intended to be shown below [ashchristopher's answer](https://stackoverflow.com/a/246779/294313) ... not sure why it's an answer, though. – SamB Dec 31 '20 at 18:20