The Python Interactive Shell is an interactive interpreter that can execute Python commands.

You can invoke it from your default shell — zsh, bash, fish etc.:

$ python
# or for a specific python version
$ python3.9

Also you can run interactive shell with a module/file like below:

$ python -i

Use Case

Thanks python, however I can’t say I enjoy your default shell. I need more capable, colorful interactive shell like IPython, bpython.

It’s easy to achieve this in Django. It’s well documented in django-shell:

# IPython
$ django-admin -i ipython
# bpython
$ django-admin -i bpython

Well, how can we achieve it in Python?


Python’s way is kind of similar; you invoke it with some module using -m flag:

For IPython run:

$ python -m IPython -i
# with module/file
$ python -m IPython -i

For bpython run:

$ python -m bpython -i
# with module/file
$ python -m bpython -i


In order to be able to use IPython and/or bpython first you have to install them:

$ python -m pip install ipython
$ python -m pip install bpython

Yes, it’s that easy and now we can take advantage of amazing features like below:

  • In-line syntax highlighting
  • Readline-like auto-complete with suggestions displayed as you type
  • Expected parameter list for any Python function, etc.


Probably it would be better to have them as aliases:

# .aliases
alias pi='python -m IPython -i'
alias pib='python -m bpython -i'

All done!