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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to