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.
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)
withopen('index.json') asfd:
index.serialize(fd)Load an existing index:
withopen('index.json') asfd:
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)
forsymbolinunresolved:
forscore, module, variableinindex.symbol_scores(symbol):
ifvariableisNone:
imports.add_import(module)
else:
imports.add_import_from(module, variable)
breakpython_source=imports.update_source()Configuring import styles
- Using
importmagic.Imports.
imports=importmagic.Imports.set_style(multiline='backslash', max_columns=80, indent_with_tabs=True)multiline takes backlslash or parentheses.
- From
setup.cfg
Add configuration to setup.cfg
[importmagic]
multiline='parentheses'max_columns=120indent_with_tabs=1and pass root directory to importmagic
imports=importmagic.Imports(root_dir='/foo/bar/')
