question about importing a package
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
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