Skip to main content

No project description provided

Project description

Lazy Import

Supported Python Versions PyPI version

Installation

pip install lz-import
# Or
poetry add lz-import

Usage 1

# File: file_takes_long_time_to_import.py
init = initializer()

class Module:
    ...

print("imported!")
from lazy_import import lazy_import
with lazy_import():
    from file_takes_long_time_to_import import Module  # Not imported yet

def run():
    Module()

run()  # Now Module is imported.
# print imported!

Module will be imported when the __call__ or __getattr__ methods are called. See tests/test_load_later.py

Usage 2

# File: company.py
from lazy_import import lazy_import

with lazy_import():
    from user import User

class Company:
    name = "company"

    def get_user(self) -> User:
        return User()
# File: user.py
from lazy_import import lazy_import

with lazy_import():
    from company import Company

class User:
    name = "user"

    def get_company(self) -> Company:
        return Company()

if __name__ == "__main__":
    company = User.get_company()

User will be imported when the __call__ or __getattr__ methods are called.
This example codes are implemented in the tests folder. See tests/test_user.py and tests/test_company.py.

NOTE

  • Keep in mind that the class of lazy imported is not the same class with your original User class. It is wrapped by another class inside of lazy_import().
  • Only work for module or class.

TODO

This library currently doesn't support follow syntax:

with lazy_import():
    # these are actually possible but currently not implmented...
    import user  
    from user import User as user

How it works?

We can find out which files to import by parsing bytecodes inside the with syntax. After that, just wrap the value to be imported.

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

lz_import-0.1.2.tar.gz (4.6 kB view hashes)

Uploaded Source

Built Distribution

lz_import-0.1.2-py3-none-any.whl (5.1 kB view hashes)

Uploaded Python 3

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