Module absolute import in python
Python defaults to import module relatively. Here is description of python's module search order.
Give example:
$ mkdir -p /tmp/abs-import-test/{foo,bar} $ cd /tmp/abs-import-test $ touch {foo,bar}/__init__.py # make foo and bar as a python module $ touch bar/boo.py # make bar.boo module # make foo.bar module. it depends to bar.boo module created at above $ echo "import bar.boo" > foo/bar.py $ python Python 2.7.5 (default, Oct 17 2013, 21:18:01) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import foo.bar Traceback (most recent call last): File "<stdin>", line 1, in <module> File "foo/bar.py", line 1, in <module> import bar.boo ImportError: No module named boo >>>
Above script failed because python understands import bar.boo
as "Import boo module which is relatively located under the bar module currently executed(foo/bar.py)" so python tries to load foo/bar/boo.py but it doesn't exists because I was expected to load bar/boo.py.
This can be solved by using absolute_import future.
$ echo -n "from __future__ import absolute_import\nimport bar.boo" > foo/bar.py $ python Python 2.7.5 (default, Oct 17 2013, 21:18:01) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import foo.bar >>> foo.bar.bar.boo.__file__ 'bar/boo.py'