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/')

Download files

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

Source Distribution

importmagic-0.2.0.tar.gz (678.5 kB view details)

Uploaded Source

Built Distribution

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

importmagic-0.2.0-py3-none-any.whl (181.8 kB view details)

Uploaded Python 3

File details

Details for the file importmagic-0.2.0.tar.gz.

File metadata

  • Download URL: importmagic-0.2.0.tar.gz
  • Upload date:
  • Size: 678.5 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for importmagic-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3b6e5f0639153091f3749a41b71ee27e234e1a491cf76f611aef10db6d14a2ca
MD5 e58bbb36e6f2aafc65cc4634370ccea8
BLAKE2b-256 c31fdc64fcee3c586712a839f48a5536c9f270f543e3d016dc97cb4680418406

See more details on using hashes here.

File details

Details for the file importmagic-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: importmagic-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 181.8 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for importmagic-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c96784da12c422f6abe1c36e36ca2d1a993e669e9ac8700acf50f43ee1c6902
MD5 e8fe485dfe111fff64c96b0ea4cdd1c2
BLAKE2b-256 8efdcae6fafdadd18ae795ba4da2e2a79147558ce722a2898053d25fedc9d5ed

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.7

1 file

0.1.6

1 file

0.1.5

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

1 file

Supported by

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