A better Python REPL
|Build Status| |PyPI| |License|
A better Python REPL
::
pip install ptpython
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/example1.png
Ptpython is an advanced Python REPL. It should work on all Python versions from 2.6 up to 3.9 and work cross platform (Linux, BSD, OS X and Windows).
Note: this version of ptpython requires at least Python 3.6. Install ptpython 2.0.5 for older Python versions.
Installation
Install it using pip:
::
pip install ptpython
Start it by typing
ptpython.
Features
bracketed paste_ [2].
[1] Disabled by default. (Enable in the menu.)
[2] If the terminal supports it (most terminals do), this allows pasting without going into paste mode. It will keep the indentation.
pt_repr: A nicer repr with colors
When classes implement a
__pt_repr__method, this will be used instead of
__repr__for printing. Any
prompt_toolkit "formatted text"_ can be returned from here. In order to avoid writing a
__repr__as well, the
ptpython.utils.ptrepr_to_reprdecorator can be applied. For instance:
.. code:: python
from ptpython.utils import ptrepr_to_repr from prompt_toolkit.formatted_text import HTML@ptrepr_to_repr class MyClass: def __pt_repr__(self): return HTML('Hello world!')
More screenshots
The configuration menu:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-menu.png
The history page and its help:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-history-help.png
Autocompletion:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/file-completion.png
Embedding the REPL
Embedding the REPL in any Python application is easy:
.. code:: python
from ptpython.repl import embed embed(globals(), locals())
You can make ptpython your default Python REPL by creating a
PYTHONSTARTUP file_ containing code like this:
.. code:: python
import sys try: from ptpython.repl import embed except ImportError: print("ptpython is not available: falling back to standard prompt") else: sys.exit(embed(globals(), locals()))
Multiline editing
Multi-line editing mode will automatically turn on when you press enter after a colon.
To execute the input in multi-line mode, you can either press
Alt+Enter, or
Escfollowed by
Enter. (If you want the first to work in the OS X terminal, you have to check the "Use option as meta key" checkbox in your terminal settings. For iTerm2, you have to check "Left option acts as +Esc" in the options.)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/multiline.png
Syntax validation
Before execution,
ptpythonwill see whether the input is syntactically correct Python code. If not, it will show a warning, and move the cursor to the error.
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/validation.png
Additional features
Running system commands: Press
Meta-!in Emacs mode or just
!in Vi navigation mode to see the "Shell command" prompt. There you can enter system commands without leaving the REPL.
Selecting text: Press
Control+Spacein Emacs mode or
V(major V) in Vi navigation mode.
Configuration
It is possible to create a
config.pyfile to customize configuration. ptpython will look in an appropriate platform-specific directory via
appdirs. See the
appdirsdocumentation for the precise location for your platform. A
PTPYTHON_CONFIG_HOMEenvironment variable, if set, can also be used to explicitly override where configuration is looked for.
Have a look at this example to see what is possible:
config.py_
IPython support
Run
ptipython(prompt_toolkit - IPython), to get a nice interactive shell with all the power that IPython has to offer, like magic functions and shell integration. Make sure that IPython has been installed. (
pip install ipython)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ipython.png
This is also available for embedding:
.. code:: python
from ptpython.ipython.repl import embed embed(globals(), locals())
Django support
django-extensions_ has a
shell_plusmanagement command. When
ptpythonhas been installed, it will by default use
ptpythonor
ptipython.
PDB
There is an experimental PDB replacement:
ptpdb_.
Windows support
prompt_toolkitand
ptpythonworks better on Linux and OS X than on Windows. Some things might not work, but it is usable:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/windows.png
FAQ
Q: The
Ctrl-Sforward search doesn't work and freezes my terminal.
A: Try to run
stty -ixonin your terminal to disable flow control.
Q: The
Meta-key doesn't work.
A: For some terminals you have to enable the Alt-key to act as meta key, but you can also type
Escapebefore any key instead.
Alternatives
BPython_
IPython_
If you find another alternative, you can create an issue and we'll list it here. If you find a nice feature somewhere that is missing in
ptpython, also create a GitHub issue and maybe we'll implement it.
Special thanks to
Pygments_: Syntax highlighter.
Jedi_: Autocompletion library.
wcwidth_: Determine columns needed for a wide characters.
prompt_toolkit_ for the interface.
.. |Build Status| image:: https://api.travis-ci.org/prompt-toolkit/ptpython.svg?branch=master :target: https://travis-ci.org/prompt-toolkit/ptpython#
.. |License| image:: https://img.shields.io/github/license/prompt-toolkit/ptpython.svg :target: https://github.com/prompt-toolkit/ptpython/blob/master/LICENSE
.. |PyPI| image:: https://pypip.in/version/ptpython/badge.svg :target: https://pypi.python.org/pypi/ptpython/ :alt: Latest Version