Python - Импорт модуля из другой директории

У меня есть такая структура проекта:

project
-dir1
--main.py
-dir2
--__init__.py
--some_file_i_need.py
--some_dir_i_need
---__init__.py

Нужно из dir1/main.py импортировать dir2 (целиком). По типу:

from .. import dir2
dir2.some_dir_i_need()

Но при попытке сделать также появляется ошибка:

ImportError: attempted relative import with no known parent package

Ответы (2 шт):

Автор решения: Dhunga

import sys

укажите путь до файла

sys.path.append("/dir1")

from main import dir2

→ Ссылка
Автор решения: Daniil Loban

Я создал такую директорию. Сразу оговорюсь что создание главного скрипта в папке модуля является что-то типа антипатерна. но предположим что такой кейс все же есть.

.
├── dir1
│   └── main.py
├── dir2
│   ├── __init__.py
│   ├── some_dir_i_need
│   │   ├── __init__.py
│   │   └── test.py
│   └── some_file_i_need.py
└── main.py

Первое что я делаю - восстанавливаю справедливость, создаю файл в папке с проектом (на верхнем уровне)

project/main.py

from dir1.main import *

project/dir1/main.py

print('import2')
from dir2 import *
test()

project/dir2/init.py

import dir2.some_file_i_need
from dir2.some_dir_i_need import *
from dir2.some_dir_i_need.test import *

project/dir2/some_file_i_need.py

print('import2')

project/dir2/some_dir_i_need/test.py

def test():
  test()

В итоге я получаю такой вывод:

import1
import2
test

Насколько я понимаю это все происходит от того что директория запуска как бы запекается и если она имеет более высокий уровень чем все используемые модули то проблем не возникает, при условии что мы либо явно прописываем импорты и не забываем про __init__.py либо указываем все необходимое для импорта в этих файлах.

→ Ссылка