Почему не работает относительный import в Python (PyCharm)?

Есть следующая архитектура проекта:

Архитектура проекта

Проблема заключается в неисправности относительного импорта. Т.е. в теории все должно работать, как надо, но что-то идет не так.

В файле main.py я пишу from . import sieves.py. Т.е. делаю относительный импорт. Так же в файле test_1.py я тоже импортирую этот файл и пишу from .. import sieves.py. PyCharm не ругается и не подчеркивает это, как ошибку, но при запуске я получаю это: введите сюда описание изображения

Это очень странно, ведь я указал рабочую директорию и даже проверил ее через os.getcwd(). Я видел такую же проблему на нашем всеми любимом портале, и там было решение указать именно рабочую директорию. Но мне это не помогло.

Заранее благодарю за ответы!


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

Автор решения: Artem Davletov

Попробуйте просто import sieves, интерпретатор по идее должен рассматировать директорию package как main директорию проекта, при наличии __main__ в ней

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

Я со всем разобрался! Оказывается, я не так понимал импорт в Python.

  1. Дело в том, что когда мы запускаем какой-либо файл, для Python нет ничего выше этого ЗАПУЩЕННОГО файла. Т.е. запущенный файл является корнем, и мы не сможем при импорте подняться выше него, даже если там будут какие-то другие модули/пакеты. Мы можем импортировать в ЗАПУЩЕННЫЙ файл (у которого name == "main") только пакеты и модули, находящиеся на одном уровне с ним или ниже.
  2. main.py делает ПАКЕТ, в котором он лежит, ЗАПУСКАЕМЫМ. Поэтому у меня не работала команда python main.py. Нужно в таком случае использовать python -m package, где -m говорит, что надо запустить как модуль.
  3. Использовать main.py в самом корне каталога удобно тем, что у нас никогда ничего не будет выше этого файла. Значит, мы не запутаемся при импорте и всегда будем импортировать только то, что рядом с файлом и что ниже его по уровню. Еще раз: main.py лишь делает ПАКЕТ запускаемым.

Надеюсь, кому-то поможет :)

→ Ссылка