Как импортировать функцию из другой папки. 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 шт):
Сам новичок, очень интересный вопрос. Мне помогли разобраться.
Идея в том где и как Python ищет пакеты и модули. Запуская файл world.py каталог abcd (здесь и далее заменил ваш abc на abcd, тк у Python есть свой модуль abc) начинается считаться всем приложением, и вне этого каталога поиск модулей проводится будет только в стандартных библиотек Python, а так же в директориях указанных в переменной окружения PYTHONPATH (подробнее тут The import system, Modules, sys.path).
Я бы делал так:
- В директории
homeсоздал инициирующий скрипт - файлmain.py, в нем бы указал что и как запускать из вашегоworld.py
# main.py
from abcd.world import world_
print(world_)
- Во всех подкаталогах (здесь
abcdиdefg) создал бы пустой файл__init__.py. Так, при запускеmain.pyинтерпретатор воспримет все эти каталоги как модули, у которых есть свои модули.
home/
abcd/
__init__.py
world.py
defg/
__init__.py
lib.py
main.py
- Поправил бы импорты в файлах (при необходимости)
# world.py
from defg.lib import func
world_ = func()
# lib.py
def func():
return 'Заработало!'
Теперь во всех модулях можно будет импортироваться не используя относительные импорты, а писать через точечную нотацию так, если бы вы находились в директории home.
З.Ы. Оказывается я сам этого не знал, и хорошо, что наткнулся на этот вопрос. В идеале бы, кто б ещё чего путного написал.