Как импортировать функцию из другой папки. Python

Вот моя структура папок:

home/
    abc/
       world.py
    defg/
        lib.py

папка abc и папка defg находятся в паке home

Нужно импортировать функцию из файла lib.py в файл world.py, пробовала и через файл __init__.py и так:

import sys
sys.path.insert(0, '/path/to/application/app/defg')

import lib

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

Автор решения: Riangry
from defg import lib

или

from defg.lib import my_lib
→ Ссылка
Автор решения: Levis Serena

Сам новичок, очень интересный вопрос. Мне помогли разобраться.
Идея в том где и как Python ищет пакеты и модули. Запуская файл world.py каталог abcd (здесь и далее заменил ваш abc на abcd, тк у Python есть свой модуль abc) начинается считаться всем приложением, и вне этого каталога поиск модулей проводится будет только в стандартных библиотек Python, а так же в директориях указанных в переменной окружения PYTHONPATH (подробнее тут The import system, Modules, sys.path).



Я бы делал так:

  1. В директории home создал инициирующий скрипт - файл main.py, в нем бы указал что и как запускать из вашего world.py
# main.py
from abcd.world import world_

print(world_)
  1. Во всех подкаталогах (здесь abcd и defg) создал бы пустой файл __init__.py. Так, при запуске main.py интерпретатор воспримет все эти каталоги как модули, у которых есть свои модули.
home/
    abcd/
        __init__.py
        world.py
    defg/
        __init__.py
        lib.py
    main.py
  1. Поправил бы импорты в файлах (при необходимости)
# world.py
from defg.lib import func

world_ = func()
# lib.py
def func():
    return 'Заработало!'

Теперь во всех модулях можно будет импортироваться не используя относительные импорты, а писать через точечную нотацию так, если бы вы находились в директории home.


З.Ы. Оказывается я сам этого не знал, и хорошо, что наткнулся на этот вопрос. В идеале бы, кто б ещё чего путного написал.

→ Ссылка