Skip to main content

PEP 690 like lazy imports for python

Project description

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

lazy-imports-lite changes the semantics of python imports and defers the import until it is used the first time.

It is also important to note that this project is not affiliated in any way with the original PEP. I liked the idea of lazy-imports and wanted to use them for my projects without having to change my code. I hope that this project makes it possible to collect knowledge about

[!IMPORTANT] lazy-imports-lite is still in early development and may contain bugs. Make sure that to test your code carefully before you use it.

Installation

You can install "lazy-imports-lite" via pip:

pip install lazy-imports-lite

Key Features

  • lazy imports almost like PEP 690
  • no code changes required
  • can be enabled per module (by keyword in the package)

How is it different to PEP 690?

  • It has not the same performance like the implementation from the pep. Every access to parts of imported modules is transformed to an attribute access x -> x.v.
  • Exceptions during deferred import are converted to LazyImportError

Usage

  • add lazy-imports-lite to your project dependencies.
  • add lazy-imports-lite-enabled to the keywords of your project.
      #pyproject.toml
      [project]
      keywords=["lazy-imports-lite-enabled"]
    

This enables lazy imports for all top level imports in your modules in your project. One way to verify if it is enabled is to check which loader is used.

>>> import test_pck
>>> print(type(test_pck.__spec__.loader))
<class 'lazy_imports_lite._loader.LazyLoader'>

Implementation

lazy-imports-lite works by rewriting the AST at runtime before the code is compiled.

The following code:

from foo import bar


def f():
    print(bar())
    print(bar())

is internally transformed to:

import lazy_imports_lite._hooks as __lazy_imports_lite__

globals = __lazy_imports_lite__.make_globals(lambda g=globals: g())
bar = __lazy_imports_lite__.ImportFrom(__package__, "foo", "bar")


def f():
    print(bar.v())
    print(bar.v())

This transformation should be never visible to you (the original source location is preserved) but it is good to know if something does not work as expected.

You can view a preview of this transformation with lazy-imports-lite preview <filename>, if you want to know how your code would be changed.

Issues

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

License

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

Project details


Download files

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

Source Distribution

lazy_imports_lite-0.0.1.tar.gz (65.5 kB view details)

Uploaded Source

Built Distribution

lazy_imports_lite-0.0.1-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file lazy_imports_lite-0.0.1.tar.gz.

File metadata

  • Download URL: lazy_imports_lite-0.0.1.tar.gz
  • Upload date:
  • Size: 65.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.1

File hashes

Hashes for lazy_imports_lite-0.0.1.tar.gz
Algorithm Hash digest
SHA256 7beca1ac09e52f3c7b62b7248632dc5527bc266f79e09bd507747b56cd96f665
MD5 e220d88240c0c6ef67a62f8b2ce6c34b
BLAKE2b-256 c3e806243a1ad4b224b22d1ee2aaa55fdaac71bdb27b16e33e85287fad002c67

See more details on using hashes here.

File details

Details for the file lazy_imports_lite-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for lazy_imports_lite-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 03e7f57bf6e54b6bde4c60bc948be8ef5fd6633421b248c2372ccd4928073f06
MD5 15503b43511735b1ff5b01dba75135f2
BLAKE2b-256 920f045f8e0f227bd2277b3237c60e178842dcc80b0f75e62b842aafbddcf0f8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page