Skip to main content

ci Docs pypi version Python Versions PyPI - Downloads coverage GitHub Sponsors

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.

Installation

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://git@github.com/15r10nk-insiders/canonical-imports.git@insider

Key Features

  • 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

Usage

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.

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:
    # 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
    
    This rule does nothing if the import chain leaves the package m.q again (if f would be defined another package m.x for example). This option might be useful if you do not use private module paths (with leading _).

Issues

If you encounter any problems, please report an issue along with a detailed description.

License

Distributed under the terms of the MIT license, "canonical-imports" is free and open source software.

Metadata

Release files for canonical-imports 0.4.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 canonical-imports 0.4.0
File Size Uploaded Provenance
canonical_imports-0.4.0.tar.gz 74.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for canonical-imports 0.4.0
File Interpreter ABI Platform
canonical_imports-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 82.2 kB

Release files / canonical_imports-0.4.0.tar.gz

Download URL canonical_imports-0.4.0.tar.gz
Size 74.7 kB
Tags Source
SHA-256 checksum
How to use checksums
69b4374bd5f3035572790bda1d9849152677b20070d19ff1667981fefa61b253
BLAKE2b-256 checksum
How to use checksums
500289329d3112f6398b439ef4b7e90c63838a013c2578ff7d710a07bf48841e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / canonical_imports-0.4.0-py3-none-any.whl

Download URL canonical_imports-0.4.0-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
17908c0012338d0d291d7f7bcb4aa27102eeaa0a9bfa6bd8ae2f029766b978bf
BLAKE2b-256 checksum
How to use checksums
4cfa2015d947ba987a3b8ec44da5582842615d27edb5132e60d42dcdf8174098
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for canonical-imports 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files No provenance

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