ImportError: attempted relative import with no known parent package python

У меня вот такая структура проекта ---package1/code.py ---package2/ext.py

Как мне импортировать переменную из ext.py в code.py ?

from ext import var - не срабатывает, говорит что не существует модуля ext

from ..package2.ext import var - тоже не срабатывает выдаётся ошибка: ImportError: attempted relative import with no known parent package


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

Автор решения: Smoliarick
  • в пакетах package1 и package2 должен быть пустой файл __init__.py (если его нет)
  • такая структура будет:
ваш_проект/
   package1/
      __init__.py
      code.py
   package2/
      __init__.py
      ext.py

  • я тестировал на таких файлах:

code.py

var = "code.py"

ext.py

from package1.code import var
print(var) # выводит code.py

P.S. Надеюсь чем-то помогло

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

Python просматривает список каталогов определенный в sys.path.

Ошибка: ImportError: attempted relative import with no known parent package говорит о том что модуль не был найден в sys.path (вывод ее на печать поможет прояснить ситуацию).

При такой структуре желательно использовать main.py для запуска и импорта дочерних модулей:

project_folder/
   main.py
   package1/
      __init__.py
      code.py
   package2/
      __init__.py
      ext.py

Если вам нужно запустить code.py и при этом импортировать данные из ext.py, то нужно:

  • запустить code.py как модуль python -m package1.code
  • или добавить sys.path.append(os.getcwd()) в самое начало code.py
→ Ссылка
Автор решения: max_gld

Всё работает.

  1. В файлах указывать import и from без ведущих точек:

    from package2.ext import var
    

    а не

    from ..package2.ext import var
    
  2. Вызывать нужно из папки ваш_проект вот такую команду:

    python -m package1.code
    

Можно путь к python указать полностью, типа usr/bin/python. Важно указать -m и точку . между package1 и code, а не /, и после code не писать .py.

Вот так:

путь_к_вашему_проекту> python -m package1.code
→ Ссылка