Импорт модулей в Python
Оператор импорта в Python используется для импорта модулей, которые мы хотим использовать в нашей программе. Модули – это скрипты в Python, содержащие служебные функции, типы, классы и т.д. Есть много модулей, которые мы регулярно используем в программах, такие как sys, os, collections и т.д.
Если мы хотим импортировать встроенные модули в Python или любой сторонний модуль, установленный с помощью диспетчера пакетов, такого как PIP, мы можем очень легко импортировать и использовать их в нашей программе.
import collections import sys
Python ищет модули и пакеты в свойстве sys.path. Этот путь всегда содержит текущий каталог, из которого выполняется сценарий, поэтому любой модуль в текущем каталоге можно импортировать как есть.
Импорт в Python чувствителен к регистру, поэтому import sys и import Sys ищут разные модули для импорта.
Python сначала ищет модуль во встроенных модулях. Если не найден, то ищет модули в текущем каталоге. Итак, если у нас есть файл math.py в том же каталоге, что и наш основной скрипт, он будет загружен при вызове import math, если модуль ‘math’ отсутствует во встроенных модулях. Вы можете получить список встроенных модулей, используя sys.builtin_module_names. На изображении ниже показаны встроенные модули:
Классы и функции импорта из модуля
Мы также можем импортировать определенные классы из модуля. Таким образом, мы можем импортировать определенные части модуля и использовать их. Это также помогает в написании свободного кода. Мы можем добиться этого, используя ключевое слово from с оператором импорта.
from collections import namedtuple from os import path
Пользовательский модуль импорта
Когда мы создаем скрипт, мы можем импортировать его в другой скрипт Python, используя его имя. Допустим, у нас есть следующая структура каталогов с несколькими скриптами.
У нас есть следующие функции, определенные в файле utils.py.
def add(i, j): return int(i) + int(j) def uppercase(s): return str(s).upper()
Мы можем импортировать его в python_import_examples.py и использовать его функции.
import utils print(utils.add(10,10)) print(utils.uppercase('java'))
Импорт as
Мы можем определить собственное имя для импортированного модуля, используя оператор import as.
# python import as import utils as u print(u.add(10,10)) print(u.uppercase('java'))
Результат будет таким же, как и в предыдущей программе.
Импорт из другого каталога
Если скрипт, который мы импортируем, находится в том же каталоге, то мы можем импортировать его так же, как и встроенные модули. Однако, если скрипт присутствует в другом каталоге, мы можем использовать библиотеку importlib, чтобы импортировать их как модуль.
Скажем, наш Strutils.py имеет следующие функции:
def uppercase(s): return str(s).upper() def lowercase(s): return str(s).lower()
Теперь давайте посмотрим, как использовать importlib для импорта этого скрипта в наш пример.
# Refer: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly # Refer: https://stackoverflow.com/questions/4383571/importing-files-from-different-folder import importlib, importlib.util def module_from_file(module_name, file_path): spec = importlib.util.spec_from_file_location(module_name, file_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module strutils = module_from_file("strutils", "../mymodule/strutils.py") print(strutils.uppercase('java')) print(strutils.lowercase('DATA'))
Класс импорта из другого файла
Мы можем импортировать скрипты и использовать определенные в них классы с помощью importlib. Допустим, у нас есть классы Person и Student, определенные в файле myclasses.py.
class Person: name = "" def __init__(self, personName): self.name = personName def showName(self): print(self.name) class Student(Person): id = 0 def __init__(self, studentName, studentId): Person.__init__(self, studentName) self.id = studentId def getId(self): return self.id
Вот пример кода, в котором я использую ранее определенную функцию для импорта этого скрипта и использования его классов.
#python import class from another file mc = module_from_file("myclasses", "../mymodule/myclasses.py") p = mc.Person('Pankaj') p.showName() s = mc.Student('David',25) s.showName() print(s.getId())
Обратите внимание, что мы можем сохранить любое имя для импортируемого модуля, это похоже на использование оператора import as.
Есть еще один способ импортировать скрипты из другого каталога с помощью модуля sys.
import sys sys.path.append("../mymodule/") from myclasses import Person as PC p = PC('Meghna') p.showName()
Это полезно, когда мы хотим импортировать только определенные классы и функции из импортированного файла. Кроме того, использование этого кода намного проще для понимания.
Заключение
Оператор импорта Python позволяет нам импортировать модули, определенные классы и функции из модулей. Его очень легко использовать, и, поскольку в большинстве случаев мы работаем со встроенными модулями или модулями, установленными с использованием PIP, нам не нужно писать логику для загрузки скриптов из другого каталога.