Импорт модулей в Python: практическое руководство с примерами
Что такое модули в Python?
Модуль — одиночный Python-файл, содержащий переменные, функции и классы. Если файл назван guru99.py, модуль доступен как guru99. Модули позволяют разбить большую программу на логические части, держа код организованным и переиспользуемым.
Зачем импортировать модули?
Чтобы использовать код, определённый в другом файле, нужно импортировать его. Импорт даёт доступ к функциям, классам и переменным модуля, как ключевое слово import в JavaScript, Java или Ruby.
Создание и импорт модуля
Пройдёмся по простому примеру.
Структура папки:
modtest/ test.py display.py
1. Создайте test.py:
def display_message():
return 'Welcome to Guru99 Tutorials!'
2. Создайте display.py и импортируйте test:
import test print(test.display_message())
Запуск display.py печатает:
Welcome to Guru99 Tutorials!
Импорт класса из модуля
Пусть Car.py определяет класс автомобиля:
class Car:
brand_name = 'BMW'
model = 'Z4'
manu_year = '2020'
def __init__(self, brand_name, model, manu_year):
self.brand_name = brand_name
self.model = model
self.manu_year = manu_year
def car_details(self):
print('Car brand is', self.brand_name)
print('Car model is', self.model)
print('Car manufacture year is', self.manu_year)
def get_car_brand(self):
print('Car brand is', self.brand_name)
def get_car_model(self):
print('Car model is', self.model)
Используйте в display.py:
import Car
car_det = Car.Car('BMW', 'Z5', 2020)
print(car_det.brand_name)
car_det.car_details()
car_det.get_car_brand()
car_det.get_car_model()
Вывод:
BMW Car brand is BMW Car model is Z5 Car manufacture year is 2020 Car brand is BMW Car model is Z5
Использование from для импорта конкретных элементов
Когда нужны только несколько функций или переменных, импортируйте их напрямую:
from test import display_message print(display_message())
Если попытаться использовать имя, не импортированное, Python поднимет NameError:
from test import display_message print(display_message1())
Импорт всего из модуля
Импортируйте весь модуль с import test и префиксируйте имена модулем, или импортируйте все имена в текущее пространство имён с from test import *. Последнее удобно, но может загрязнить неймспейс.
Понимание dir()
Встроенная функция dir() перечисляет все атрибуты объекта, включая определённые в модуле:
import Car print(dir(Car))
Для стандартных библиотек:
import json print(dir(json))
Работа с пакетами
Пакет — директория, содержащая файл __init__.py и один или более модулей. Например:
Структура директории:
mypackage/ __init__.py module1.py module2.py module3.py
В module1.py:
def mod1_func1():
print('Welcome to Module1 function1')
def mod1_func2():
print('Welcome to Module1 function2')
# …
Импорт с алиасом:
import mypackage.module1 as mod1 mod1.mod1_func1() mod1.mod1_func2()
Путь поиска модулей Python
При разрешении импорта Python проверяет:
- Текущую рабочую директорию.
- Встроенные модули.
- Директории, перечисленные в
sys.path.
Инспектируйте с:
import sys print(sys.path)
Использование алиасов для модулей
Дайте модулю короткое имя для лучшей читаемости:
import test as t print(t.display_message()) print(t.my_name)
Абсолютные vs относительные импорты
В много-модульном проекте можно ссылаться на модули либо по полному пути (абсолютный), либо относительно текущего файла.
Пример абсолютного импорта
from package1.module1 import myfunc1 # или import package1.module1 package1.module1.myfunc1()
Пример относительного импорта
from .module1 import myfunc1 # или from .subpkg.module3 import myfunc3
Абсолютные импорты понятнее и менее ошибочны при перемещении проекта, но могут стать многословными. Относительные импорты держат код кратким, но сложнее для трассировки в больших проектах.
Ключевые выводы
- Модули позволяют разбивать Python-код на отдельные файлы.
- Используйте
importилиfrom … import …для доступа к содержимому модуля. - Алиасы (
as) делают длинные имена модулей удобнее. - Пакеты организуют модули в директории, с
__init__.pyкак маркером. - Понимайте
sys.pathдля устранения ошибок импорта. - Выбирайте абсолютные импорты для ясности, относительные — для краткости.
Python
- Модули в Python: создание, импорт и продвинутое использование
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Мастерство строк форматирования format() в Python: понятные примеры
- Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
- Освоение лямбда-функций Python: практические примеры и лучшие практики
- Функция round() в Python: подробное объяснение с практическими примерами
- Освоение функции map() в Python: синтаксис, примеры и лучшие практики
- Python timeit(): измерение времени выполнения с практическими примерами
- Counter в collections Python: эффективное подсчёт, обновление и арифметические операции
- Понимание type() и isinstance() в Python: практические примеры