Skip to main content

Automatically reload modified Python modules in notebooks and scripts.

Project description

Automatically reload modified Python modules in notebooks and scripts.

Overview

LiveImport eliminates the need to restart a notebook's Python server to reimport code under development in external files. Suppose you are maintaining symbolic math code in symcode.py, LaTex formatting utilities in printmath.py, and a simulator in simulator.py. In the first cell of a notebook, you might write

import liveimport
import numpy as np
import matplotlib.plot as plot

import symcode
from printmath import print_math, print_equations as print_eq
from simulator import *

liveimport.register(globals(),"""
import symcode
from printmath import print_math, print_equations as print_eq
from simulator import *
""", clear=True)

Then, whenever you run cells, LiveImport will reload any of symcode, printmath, and simulator that have changed since they were registered or last reloaded. LiveImport deems a module changed when its source file modification time changes.

LiveImport also updates imported module symbols. For example, if you modify printmath.py, LiveImport will reload printmath and bind print_math and print_eq in the global namespace to the new definitions. Similarly, if you update simulator.py, LiveImport will create or update bindings for every public symbol in simulator — that is, every symbol defined in the module that does not start with _, unless there is an __all__ property defined for the module, in which case it acts on only those symbols, just like from simulator import *.

Modules referenced by registered import statements are called tracked modules. LiveImport analyzes top-level import dependencies between tracked modules to ensure reloading is consistent with those dependencies. Suppose simulator imports symcode. Then, if you modify symcode.py, LiveImport reloads simulator after it reloads symcode even if simulator.py has not changed. If you do modify both, LiveImport takes care to reload symcode first.

Cell Magic

As an alternative to calling register(), LiveImport defines a cell magic %%liveimport which both executes the cell content and registers every top-level import statement. So, you could split the example cell above into two, making the second

%%liveimport --clear
import symcode
from printmath import print_math, print_equations as print_eq
from simulator import *

No register() call is required. Unfortunately, Visual Studio Code and possibly other environments do not analyze magic cell content, making %%liveimport use awkward. However, there is a workaround: calling hidden_cell_magic(enabled=True) causes #_%%liveimport lines at the beginning of cells to act just like %%liveimport when the cell is run, and since #_%%liveimport is a Python comment, Visual Studio Code and other environments do analyze the content.

A complete cell magic example equivalent to the first begins with cell

import liveimport
import numpy as np
import matplotlib.plot as plot
liveimport.hidden_cell_magic(enabled=True)

which is followed by cell

#_%%liveimport --clear
import symcode
from printmath import print_math, print_equations as print_eq
from simulator import *

Outside of Notebooks

You can use LiveImport outside of notebooks, but in that case, you must call sync() to check for out of date imports. You can also disable automatic syncing in a notebook by calling auto_sync(enabled=False) and rely on explicit syncing instead.

Documentation

For more details including an API reference see liveimport.readthedocs.io.

Installation

You can install LiveImport from PyPI with

$ pip install liveimport

You can also clone the repo and install it directly.

$ git clone https://github.com/escreven/liveimport.git
$ cd liveimport
$ pip install .

LiveImport requires Python 3.10 or greater and IPython 7.16.1 or greater.

Questions or Issues

If you have any questions or encounter any issues, please submit them on GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

liveimport-0.9.3.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

liveimport-0.9.3-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file liveimport-0.9.3.tar.gz.

File metadata

  • Download URL: liveimport-0.9.3.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for liveimport-0.9.3.tar.gz
Algorithm Hash digest
SHA256 71f8dd14c22d802f86d8b133cc3b10dad5b69d23b62167997eb43d2c954c370d
MD5 f6fbfde5cfad5bb7770a67f3864db1b5
BLAKE2b-256 00f61b8127ee8cd5f984f00ae7e1cab1a3e0df6a8bb3d29c4ebc12348055508d

See more details on using hashes here.

File details

Details for the file liveimport-0.9.3-py3-none-any.whl.

File metadata

  • Download URL: liveimport-0.9.3-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for liveimport-0.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a19df026205072c1762f9691a81dfab885c9c11d3d94d4d877f223c478ddff24
MD5 32c9958b1c5bd4a0b52df80d6086063f
BLAKE2b-256 39ab68ea283ec0926784fa60992839fcb76a0d27ef3209ce68514fb9e00f05af

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page