question about importing a package

Terry Reedy tjreedy at udel.edu
Thu Dec 6 21:44:10 CET 2012


On 12/6/2012 11:50 AM, Matt wrote:
> It works now. Steven and Alex, thanks for your help!
>
> I ended up leaving sample.py and foo.py and bar.p the way they were, and in __init__.py putting:
>
> from foo import *
> from bar import *
>
> So my mistake was not importing the foo and bar modules into sub_one/__init__.py.
>
> I also see how the __all__ array helps me control what gets imported. I can leave it out of __init__.py, and everything gets imported. So my three lessons are:
>
> 1) "from X import *" will look for an __all__ list in module X, or in __init__.py if X is a package instead of a module, and import only what is in that list. Module names are different than function names in that list.
> 2) if __all__ is not defined, "from X import *' will import everything in X's namespace

... that does not have a leading underscore. This is why there are 
things like

import sys as _sys
from itertools import chain as _chain

in the stdlib when the module author does not define __all__.

> 3) __init__.py acts like just another module, so you have to import the package contents that you want into it before you import the package into your code


-- 
Terry Jan Reedy




More information about the Python-list mailing list