В разработке программного обеспечения на Python часто возникает необходимость организовать код в разные файлы и директории для удобства и читаемости. Иногда появляется необходимость импортировать функции или классы из файла, который находится в поддиректории.
Например, есть файл main.py
, который находится в директории project
. В поддиректории lib
этого проекта находится файл utils.py
. Из main.py
требуется импортировать функцию print_hello
из utils.py
.
В первую очередь может показаться, что это можно сделать так:
1 | import lib.utils |
Однако, при попытке запустить код возникает ошибка ImportError: No module named lib.utils
.
Существует несколько способов решить данную проблему.
Создание файла __init__.py
Один из наиболее простых и распространённых способов — это создать пустой файл __init__.py
в директории lib
. Он сообщает Python, что lib
— это пакет, и файлы внутри него могут быть импортированы.
После создания файла __init__.py
в lib
, импорт print_hello
из utils.py
может быть выполнен следующим образом:
1 | from lib.utils import print_hello |
Также можно импортировать весь файл utils.py
и обращаться к функции print_hello
через точку:
1 2 3 | import lib.utils lib.utils.print_hello() |
Или можно импортировать весь файл utils.py
под другим именем:
1 2 3 | import lib.utils as u u.print_hello() |
Использование относительного импорта
Если файлы main.py
и utils.py
находятся в одном пакете, можно использовать относительный импорт.
1 | from .lib.utils import print_hello |
Здесь точка перед lib
указывает на текущую директорию.
Использование sys.path
Ещё один способ — это добавить путь к необходимой директории в sys.path
, который содержит список путей, где Python ищет модули при импорте.
1 2 3 4 | import sys sys.path.insert( 0 , '/путь/к/директории/lib' ) import utils |
Однако, этот способ следует использовать с осторожностью, поскольку он может привести к конфликтам имен модулей.
Добавить комментарий