Задать вопрос
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый

Как сделать относительный импорт без родительского пакета?

Имеется такая структура проекта
project
----dir
--------module2.py
----module1.py


Как из module2 импортировать module1? (module2 запускается как самостоятельная программа)

Если в module2 написать from ..module1 import *, то возникнет ошибка
ImportError: attempted relative import with no known parent package


Как исправить эту проблему (без манипуляций с файлами, конечно) ?
  • Вопрос задан
  • 3948 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Никак. Пакеты могут импортировать другие пакеты на одном с ними уровне или уровнем ниже, но не могут импортировать файлы из пакетов уровнем выше.

Если, конечно, не манипулировать механизмом импорта. Он это позволяет, но обычно овчинка выделки не стоит.
Так что проще закинуть module1 в каталог(пакет) и импортировать его как package1.module1.

А вообще очень странное решение - почему скрипт верхнего уровня в каталоге, а импортируемые модули - нет?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Khamzabek
Один из способов решения этой проблемы состоит в добавлении директории проекта в sys.path. Это можно сделать в самом начале module2, например так:

import os
import sys

# Добавляем путь к директории проекта в sys.path
project_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(project_directory)

# Теперь можно импортировать module1
from module1 import *
Ответ написан
Maxsior
@Maxsior
loading...
Если скрипт запускается из корневой папки (`python dir/module2.py`), то вам не нужен относительный импорт, используйте абсолютный `from module1 import *`, пути будут вычисляться от корня проекта.

Но стоит всё-таки посмотреть на реорганизацию файловой структуры проекта, ради интереса хотя бы)
Посмотрите, как сделано у крупных библиотек.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы