ipython-profile
A slightly opinionated template for iPython configuration for interactive development. Auto-reload and no imports for packages and modules in the project.
Usage
Install the library using your favorite package manager:
# With poetry
poetry add ipython-profile
# With pip
pip install ipython-profile
Now you can use ipython-profile
in the project directory:
$ cd ~/awesome-project
$ ipython-profile # If installed with pip
$ poetry run ipython-profile # If installed locally with poetry
[ipython-profile] Created .ipython-profile directory with default config.
[ipython-profile] It seems that you are using git in this project. Consider adding .ipython-profile to .gitignore.
Python 3.9.6 (default, Jun 29 2021, 05:25:02)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.0.1 -- An enhanced Interactive Python. Type '?' for help.
IPython profile: .ipython-profile
In [1]:
It loads modules automatically (magic!) if the called name wasn't found in the environment using ipython-autoimport.
It also automatically reloads modules on changes using iPython autoreload extension.
In [1]: requests.get('https://google.com/')
Autoimport: import requests
Out[1]: <Response [200]>
In [2]: libs.auth.get_token()
Autoimport: import libs
Autoimport: import libs.auth
Out[2]: 1
In [3]: # I'm changing libs/auth.py
In [4]: libs.auth.get_token()
Out[4]: 2
ipython-profile
by default creates an iPython profile directory in ./.ipython-profile
. If you want to set a different directory, use --profile-dir
option.
How it works?
The template is small and straightforward underneath: it installs ipython-autoimport
and creates this iPython configuration file:
## lines of code to run at IPython startup.
# Default: []
c.InteractiveShellApp.exec_lines = [
'%autoreload 2'
]
## A list of dotted module names of IPython extensions to load.
# Default: []
c.InteractiveShellApp.extensions = ['autoreload', 'ipython_autoimport']
Basically, it enables auto-import and auto-reload for all modules.
In the future the profile might include some tools to simplify using it with web frameworks (Django, FastAPI) and testing frameworks.