Managing imports is difficult when the project grows in size. Functions and classes gets moved or renamed.
canonical-imports
follows your imports and finds out where the things you are importing are actually defined.
It can change your imports which makes your code cleaner and maybe even faster.
This project is currently only available for insiders, which mean that you can get access to it if you sponsor me. You should then have access to this repository.
You can install it with pip and the github url.
pip install git+ssh://[email protected]/15r10nk-insiders/canonical-imports.git@insider
- follow imports to their definition and replace them.
- options to prevent the following of some types of imports (from public to private modules).
I will show you what it does with the following example:
# m/a.py
from ._core import helper
# m/_core.py
from ._utils import helper
# m/_utils.py
def helper():
print("some help")
helper
was moved from _core
to _utils
canonical-imports -w m/a.py
changes m/a.py
to:
# m/a.py
from ._utils import helper
You can use canonical-imports
from the command line to fix some files.
canonical-imports my_package/something.py
Use canonical-imports --help
for more options.
canonical-imports follows all imports by default. --no
can be used to prevent certain types of import changes.
--no public-private
prevents changing public imports into private imports like in the following:-from package.module import Thing +from package.module._submodule import Thing
--no into-init
prevents following imports into__init__.py
files. Example:This rule does nothing if the import chain leaves the package# m/__init__.py ... # m/a.py from .b import f # <-- change to: from .q import f # m/b.py from .q import f # prevent changing to: from .q.c import f # m/q/__init__.py from .c import f # m/q/c.py def f(): pass
m.q
again (iff
would be defined another packagem.x
for example). This option might be useful if you do not use private module paths (with leading_
).
If you encounter any problems, please report an issue along with a detailed description.
Distributed under the terms of the MIT license, "canonical-imports" is free and open source software.