Search code examples
pythonimportpackageimporterror

Python package import from parent directory


I've the following source code structure

testapp/
├─ __init__.py
├─ testmsg.py
├─ sub/
│  ├─ __init__.py
│  ├─ testprinter.py

where testmsg defines the following constant:

MSG = "Test message"

and sub/testprinter.py:

import testmsg

print("The message is: {0}".format(testmsg.MSG))

But I'm getting ImportError: No module named testmsg

Shouldn't it be working since the package structure? I don't really want to extend sys.path in each submodule and I don't even want to use relative import.

What am I doing wrong here?


Solution

  • It all depends on which script you run. That script's path will be added to python's search path automatically.

    Make it the following structure:

    TestApp/
    ├─ testapp/
    │  ├─ __init__.py
    │  ├─ testmsg.py
    │  ├─ sub/
    │  │  ├─ __init__.py
    │  │  ├─ testprinter.py
    ├─ README
    ├─ LICENSE
    ├─ setup.py
    ├─ run_test.py
    

    Then run TestApp/run_test.py first:

    from testapp.sub.testprinter import functest ; functest()
    

    Then TestApp/testapp/sub/testprinter.py could do:

    from testapp.testmsg import MSG
    print("The message is: {0}".format(testmsg.MSG))
    

    More good hints here;