Welcome to Dynamic IPython’s documentation!¶
- date
September 14, 2020
Startup Scripts¶
This repository hosts startup scripts that can be used during IPython’s startup.
The scripts add well over 1000 aliases to the namespace, import commonly used
modules, instantiate exception hooks from cgitb, format a traceback,
import readline to add additional keybindings as well as checking for pyreadline
for Windows users, lex documents with the pygments library and stylize the
REPL as a result, add multiple application specific loggers, and more.
Heavy use of prompt_toolkit and Jedi’s respective APIs are utilized here.
As both libraries as well as pygments are explicit dependencies of IPython, no additional installation is required for those features.
Specifically, new completers are added to the shell to handle fuzzy completion as well as autocompletion of paths and executables.
Portability¶
Portability was a major factor while writing these scripts.
Therefore, any script should work on:
Ubuntu
Android
Windows 10
On Windows 10, the scripts have been primarily tested in powershell windows or in a shell with either ConEmu or Cmder.
As a result, there may be unexpected behavior that arises when running the following scripts while within in an unmodified cmd shell.
Motivation¶
The intent was to create a system that worked on any relatively modern platform.
I regularly use IPython as a system shell in comparison to the
typical Bash shell that Unix OSes provide. While a terminal provides a
huge number of powerful commands and the ability to pipe them together,
Bash still has a number of inconsistencies and oddities in its behavior.
Installation¶
This repository can be installed in the following manner.:
python setup.py build
pip install -U -e .
However, that unfortunately assumes one has admin access to wherever pip installs files globally, and that the python command points to python3.7. In most cases it does not.
If one has pipenv installed, an easier installation could be
pipenv install -e .
If a non-pipenv installation is desired for some reason, a fully specified installation could look like.
python3 setup.py build
python3 -m pip install -U --user pip -e .
As one can see this gets complicated very quickly, and as a result, installation via pipenv is the recommended method.
See Also¶
For commands that are more related to the interactive aspect of the shell, see the following.
In [1]: from IPython import get_ipython
In [2]: _ip = get_ipython()
In [3]: help(_ip) # doctest: +SKIP
In [4]: dir(_ip): # doctest: +SKIP
Which features descriptions of functions relevant to startup such as
IPython.core.interactiveshell.register_magic_function() and literally
every option available through the %config magic.
In addition, there’s an abundance of documentation online in the form of rst docs and ipynb notebooks.
Table of Contents¶
Startup¶
The first script to run invokes %rehashx which initializes
IPython with all of the commands that the system shell knows.
By invoking %rehashx at the beginning of startup, all system commands
are added as well, which regularly adds well over 1000 commands to the shell.
The IPython team cleverly remembers to also check the environment variable
PATHEXT on Windows devices as it indicates to the system which
files are executable without requiring the typical Unix file permissions
system.
Before delving into the startup files, the API for the main IPython config file will be discussed.
This is simply a heavily configured version of the file that’s generated when
ipython --generate-config is run on the command line.
As a result, it heavily utilizes the traitlets module.
IPython Config API¶
-
exception
NotInIPythonError(*args, **kwargs)[source][source]¶ Bases:
default_profile.ipython_config.UsageErrorError raised when a magic is invoked outside of IPython.
-
conditional_editing_mode()[source][source]¶ Execute this function to enable the emacs editing mode on Windows and vi only in tmux.
Startup API Docs¶
IPython-specific Sphinx extensions.¶
The default_profile.sphinxext package.
Imports the modules found in the current directory and utilizes
pkgutil and pkgutil.extend_path()
to extend the packages __path__ parameter.
It only imports the modules below if this repository has been installed.
If this weren’t true, then starting IPython without this package installed
would emit ImportError on startup, which would be frustrating for
users.
sphinx
Extensions¶
In addition this repository handles a growing number of IPython extensions.
Some of the bundled extensions provide a more usable PAGER for users on
Window than the one provided by pydoc.
Here are the varying %magic extensions that are bundled with this
portion of the repository.
Extensions
Continue reading with the pandas extension at Pandas CSV.
Utilities¶
The modules contained in this package are, generally speaking, a collection of scripts that I’ve found useful while working with IPython, but that unfortunately haven’t been fleshed out enough.
They’re still all useful in their current state and when the user is running IPython interactively, but none of the scripts haven’t been fleshed out to the extent that they could be easily changed to IPython extensions.
Goals¶
Currently the module aims to:
Create consistent
logging.LoggerobjectsMake a better pager on Windows
Create a collection of classes that can more easily remove platform-specific issues that continue to arise.
In addition, configure a module-wide logger by equating logging.BASIC_FORMAT
with a pre-determined template string like so:
>>> logging.BASIC_FORMAT = '%(asctime)s : %(levelname)s : %(message)s'
>>> UTIL_LOGGER = logging.getLogger('default_profile.util')
>>> UTIL_LOGGER.setLevel(logging.WARNING)
The submodules contained in this package are as follows: