pythonimportmodulesubdirectory

Import module from subfolder


I want to import subfolders as modules. Therefore every subfolder contains a __init__.py. My folder structure is like this:

src\
  main.py
  dirFoo\
    __init__.py
    foofactory.py
    dirFoo1\
      __init__.py
      foo1.py
    dirFoo2\
      __init__.py
      foo2.py

In my main script I import

from dirFoo.foofactory import FooFactory

In this factory file I include the sub modules:

from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2

If I call my foofactory I get the error, that python can't import the submodules foo1 and foo2:

Traceback (most recent call last):
  File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
  File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in    <module>
from dirFoo1.foo1 import Foo1
    ImportError: No module named dirFoo1.foo1

Solution

  • There's no need to mess with your PYTHONPATH or sys.path here.

    To properly use absolute imports in a package you should include the "root" packagename as well, e.g.:

    from dirFoo.dirFoo1.foo1 import Foo1
    from dirFoo.dirFoo2.foo2 import Foo2
    

    Or you can use relative imports:

    from .dirfoo1.foo1 import Foo1
    from .dirfoo2.foo2 import Foo2