Skip to main content

Import Magic image

The goal of this package is to be able to automatically manage imports in Python. To that end it can:

  • Build an index of all known symbols in all packages.
  • Find unresolved references in source, and resolve them against the index, effectively automating imports.
  • Automatically arrange imports according to PEP8.

It was originally written for the Sublime Text 2 Python Import Magic plugin.

Example of use in Sublime Text 2 plugin

Example of Import Magic at work

Using the library

Getting index from cache:

index = importmagic.SymbolIndex()
index.get_or_create_index(name='foo', paths=sys.path)

Build an index:

index = importmagic.SymbolIndex()
index.build_index(sys.path)
with open('index.json') as fd:
    index.serialize(fd)

Load an existing index:

with open('index.json') as fd:
    index = SymbolIndex.deserialize(fd)

Find unresolved and unreferenced symbols:

scope = importmagic.Scope.from_source(python_source)
unresolved, unreferenced = scope.find_unresolved_and_unreferenced_symbols()

Print new import block:

start_line, end_line, import_block = importmagic.get_update(python_source, index, unresolved, unreferenced)

Update source code with new import blocks:

python_source = importmagic.update_imports(python_source, index, unresolved, unreferenced)

For more fine-grained control over what symbols are imported, the index can be queried directly:

imports = importmagic.Imports(index, python_source)
imports.remove(unreferenced)

for symbol in unresolved:
    for score, module, variable in index.symbol_scores(symbol):
        if variable is None:
            imports.add_import(module)
        else:
            imports.add_import_from(module, variable)
        break

python_source = imports.update_source()

Configuration

Configuring import styles

  1. Using importmagic.Imports.
imports = importmagic.Imports.set_style(multiline='backslash', max_columns=80, indent_with_tabs=True)

multiline takes backlslash or parentheses.

  1. From setup.cfg

Add configuration to setup.cfg

[importmagic]
multiline = 'parentheses'
max_columns = 120
indent_with_tabs = 1

and pass root directory to importmagic

imports = importmagic.Imports(root_dir='/foo/bar/')

Release files for importmagic 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for importmagic 0.2.0
File Size Uploaded
importmagic-0.2.0.tar.gz 678.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for importmagic 0.2.0
File Interpreter ABI Platform
importmagic-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 860.3 kB

Release files / importmagic-0.2.0.tar.gz

Download URL importmagic-0.2.0.tar.gz
Size 678.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3b6e5f0639153091f3749a41b71ee27e234e1a491cf76f611aef10db6d14a2ca
BLAKE2b-256 checksum
How to use checksums
c31fdc64fcee3c586712a839f48a5536c9f270f543e3d016dc97cb4680418406
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / importmagic-0.2.0-py3-none-any.whl

Download URL importmagic-0.2.0-py3-none-any.whl
Size 181.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c96784da12c422f6abe1c36e36ca2d1a993e669e9ac8700acf50f43ee1c6902
BLAKE2b-256 checksum
How to use checksums
8efdcae6fafdadd18ae795ba4da2e2a79147558ce722a2898053d25fedc9d5ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page