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.pyplot 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 registration or their last reload. 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.pyplot 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.23.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-1.0.1.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

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

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

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for liveimport-1.0.1.tar.gz
Algorithm Hash digest
SHA256 e3beae9779a13122a10eb5720db27ba9bf2a9592a48890bb7f2658af63dce313
MD5 550b4c850ec9e9d1fac8b6d0c14201f0
BLAKE2b-256 55ca3077934ffc8b12fd39f471e84bdad3c7859f120229df575226185d38d78a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: liveimport-1.0.1-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-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8e2cb0769a2f22cc751fb7b1aa3f837007821826d3a431c1cacb45a6d4fe1234
MD5 62f07993df0f561d795f241e6d9613ea
BLAKE2b-256 6764aed1a78099cc4a4335b71d00656ad37ed4c8ba376f72a4069ec67c373898

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