How to accomplish relative import in python

After fiddling with it a bit more, I realized how to set it up, and for the sake of specificity I won’t use foo bar names. My project directory is set up as…

tools/
    core/
        object_editor/
            # files that need to use ntlib.py
            editor.py # see example at bottom
            __init__.py
        state_editor/
            # files that need to use ntlib.py
            __init__.py
        ntlib.py
        __init__.py # core is the top level package
    LICENSE
    state_editor.py # equivalent to main.py for the state editor
    object_editor.py # equivalent to main.py for the object editor

A line in object_editor.py looks like…

from core.object_editor import editor

A line in editor.py looks like…

from .. import ntlib

or alternatively

from core import ntlib

The key is that in the example I gave in the question, the “main” script was being run from within the package. Once I moved it out, created a specific package (core), and moved the library I wanted the editors to share (ntlib) into that package, everything was hunky-dory.

Leave a Comment