I don't think submodules are automatically imported, unless there are
import statements in __init__.py.

On Sun, Sep 10, 2017 at 8:08 PM, INADA Naoki <songofaca...@gmail.com> wrote:

> It looks simple and easy to understand.
>
> To achieve lazy import without breaking backward compatibility,
> I want to add one more rule:  When package defines both of __getattr__ and
> __all__, automatic import of submodules are disabled (sorry, I don't have
> pointer to specification about this behavior).
>
> For example, some modules depends on email.parser or email.feedparser.
> But since email/__init__.py uses __all__, all submodules
> are imported eagerly.
>
> See https://github.com/python/cpython/blob/master/Lib/email/
> __init__.py#L7-L25
>
> Changing __all__ will break backward compatibility.
> With __getattr__, this can be lazy import:
>
> import importlib
>
> def __getattr__(name):
>     if name in __all__:
>         return importlib.import_module("." + name, __name__)
>     raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
>
>
> Regards,
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
>


-- 
--Guido van Rossum (python.org/~guido)
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to