Lord_of_Rings
@Lord_of_Rings
Python developer

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

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


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

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


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

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

А вообще очень странное решение - почему скрипт верхнего уровня в каталоге, а импортируемые модули - нет?
Ответ написан
Комментировать
@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 *`, пути будут вычисляться от корня проекта.

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

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

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽
26 июн. 2024, в 02:23
5000 руб./за проект
26 июн. 2024, в 00:28
5000 руб./за проект
25 июн. 2024, в 23:31
1500 руб./за проект