python import modules inside folder

python

Solution

note: all `__init__.py` files are empty.

main.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       fun_a.py
    package_b/ ->
       __init__.py
       fun_b.py

app/package_a/fun_a.py

def print_a():
    print 'This is a function in dir package_a'

app/package_b/fun_b.py

from app.package_a.fun_a import print_a
def print_b():
    print 'This is a function in dir package_b'
    print 'going to call a function in dir package_a'
    print '-'*30
    print_a()

main.py

from app.package_b import fun_b
fun_b.print_b()

if you run `$ python main.py` it returns:

This is a function in dir package_b
going to call a function in dir package_a
------------------------------
This is a function in dir package_a

- main.py does: `from app.package_b import fun_b`

- fun_b.py does `from app.package_a.fun_a import print_a`

If you have `app` in your `PYTHONPATH`, then from anywhere you can `>>> from app.package_...`

so file in folder `package_b` used file in folder `package_a`, which is what you want. Right??

Problem

Want to learn the proper way for importing modules with folder ``` /garden __init__.py utilities.py someTools.py /plants __init__.py carrot.py corn.py ``` Inside `/plants/__init__.py` I have ``` __all__ = ['carrot', 'corn'] from . import * ``` inside `carrot.py` ``` def info(): print "I'm in carrot.py" ``` When I do ``` import garden garden.carrot.info() # got correct result I'm in carrot.py ``` My question is how do I correct namespace for `utilities.py` for example inside `carrot.py` and `corn.py`. I want to use function in `utilities.py` Inside `carrot.py` when I ``` import utilities as util # try use it and got global name error util.someFunc() # NameError: global name 'util' is not defined # ``` Can I configure `__init__.py` in plants folder so that it import all the modules inside garden? Like utilities and sometools ? so I don't have to import utilities in both carrot.py and corn.py and be able to use utilities ?

Original source