Search code examples
pythonerror-handlingmoduleimporterrorrelative-path

Python ImportError. How can I import modules among packages?


I was working on a project with this type of folder tree:

-main.py

  -Message_handlers
     -__init__.py
     -On_message.py
     -Other_modules.py
  
  -Exceptions_handler
     -__init__.py
     -Run_as_mainException.py

Message_handlers and Exceptions_handler are two packages, now my problem is that from inside the module On_message.py I can't import the class Run_as_mainException (inside of the module Run_as_mainException.py) using this code

# This is On_message.py
from ..Exceptions_handler.Run_as_mainException import Run_as_main_Exception

This line gives the error: ImportError: attempted relative import with no known parent package

p.s. Every file has a class inside with the same name of the file, example:

# This is Run_as_mainExample.py
class Run_as_mainExample:
    def __init__(self):
        # rest of the code

Can anyone help me please?


Solution

  • You have to assume that you're running everything from the level where main.py is located. This means, imagine that you execute python main.py, and you want to import Run_as_main_Exception from main.py, what should you do?

    from Exceptions_handler.Run_as_mainException import Run_as_main_Exception
    

    Try using that line in your On_message.py file, and you shouldn't have any problem when running your script from that exact location (remember, the same level where main.py is located)