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 шт):
import sys
укажите путь до файла
sys.path.append("/dir1")
from main import dir2
Я создал такую директорию. Сразу оговорюсь что создание главного скрипта в папке модуля является что-то типа антипатерна. но предположим что такой кейс все же есть.
.
├── 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 либо указываем все необходимое для импорта в этих файлах.