Введение
В этом практическом занятии (lab) вы научитесь проверять, импортирован ли модуль в Python. В рамках занятия рассматриваются основы импорта модулей, включая создание и импорт простого модуля. Вы узнаете, как использовать оператор import для добавления модулей в свою программу и доступа к их функциям и переменным.
Затем в занятии исследуется словарь sys.modules, который хранит все импортированные модули в текущей сессии Python. Вы также научитесь использовать модуль importlib для проверки, был ли модуль импортирован.
Изучение импорта модулей
На этом этапе вы узнаете о импорте модулей в Python. Модули - это файлы, содержащие определения и инструкции на Python. Оператор import используется для добавления модулей в текущую программу, что позволяет использовать функции и переменные, определенные в них.
Сначала создадим простой модуль. Откройте редактор VS Code в среде LabEx и создайте новый файл с именем my_module.py в директории ~/project.
## ~/project/my_module.py
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
В этом модуле определена функция greet и переменная PI. Теперь создадим другой файл Python для импорта и использования этого модуля. Создайте новый файл с именем main.py в директории ~/project.
## ~/project/main.py
import my_module
name = "LabEx User"
greeting = my_module.greet(name)
print(greeting)
print("PI =", my_module.PI)
В этом файле main.py мы используем оператор import my_module для добавления ранее созданного модуля my_module. Затем мы обращаемся к функции greet и переменной PI с помощью точечной нотации (my_module.greet, my_module.PI).
Чтобы запустить этот код, откройте терминал в среде LabEx (он должен быть уже открыт в нижней панели VS Code). Убедитесь, что текущая директория - ~/project. Если это не так, перейдите в нее с помощью команды cd:
cd ~/project
Теперь выполните скрипт main.py с помощью команды python:
python main.py
Вы должны увидеть следующий вывод:
Hello, LabEx User!
PI = 3.14159
Это демонстрирует, как импортировать модуль и использовать его содержимое в другом файле Python.
Проверка словаря sys.modules
На этом этапе вы исследуете словарь sys.modules, который является важной частью системы импорта модулей Python. sys.modules - это словарь, в котором хранятся все модули, импортированные в текущую сессию Python. Понимание этого словаря поможет вам понять, как Python управляет модулями.
Для начала создадим скрипт Python с именем check_modules.py в директории ~/project. Этот скрипт импортирует модуль sys и выводит ключи словаря sys.modules.
## ~/project/check_modules.py
import sys
print("Modules currently in sys.modules:")
for module_name in sys.modules.keys():
print(module_name)
import my_module
print("\nModules after importing my_module:")
for module_name in sys.modules.keys():
print(module_name)
В этом скрипте сначала импортируется модуль sys. Затем он проходит по ключам словаря sys.modules и выводит имя каждого модуля. После этого импортируется модуль my_module, созданный на предыдущем этапе, и снова выводится словарь sys.modules, чтобы показать новый импортированный модуль.
Теперь запустите скрипт с помощью команды python в терминале:
cd ~/project
python check_modules.py
Вы увидите список модулей, которые уже загружены при запуске интерпретатора Python, а затем тот же список с добавленным модулем my_module после оператора import my_module. Вывод будет выглядеть приблизительно так (точный список модулей может отличаться):
Modules currently in sys.modules:
builtins
sys
_frozen_importlib
_imp
_warnings
_io
... (many more modules)
Modules after importing my_module:
builtins
sys
_frozen_importlib
_imp
_warnings
_io
... (many more modules)
my_module
Обратите внимание, что модуль my_module добавляется в словарь sys.modules после оператора import. Этот словарь действует как кэш, поэтому если вы попытаетесь импортировать тот же модуль снова, Python просто извлечет его из sys.modules вместо перезагрузки с диска. Эта оптимизация улучшает производительность.
Проверка с использованием importlib
На этом этапе вы узнаете, как использовать модуль importlib для программного импорта модулей и проверки их существования. importlib является частью стандартной библиотеки Python и предоставляет способ взаимодействия с системой импорта.
Создадим скрипт Python с именем verify_import.py в директории ~/project. Этот скрипт будет использовать importlib для импорта my_module и проверки, был ли он успешно импортирован.
## ~/project/verify_import.py
import importlib
module_name = "my_module"
try:
module = importlib.import_module(module_name)
print(f"Module '{module_name}' imported successfully.")
print(f"Greeting: {module.greet('LabEx')}")
except ImportError:
print(f"Failed to import module '{module_name}'.")
В этом скрипте мы используем importlib.import_module() для импорта my_module. Если модуль найден и успешно импортирован, скрипт выводит сообщение об успехе и вызывает функцию greet из модуля. Если модуль не найден, возникает исключение ImportError, и скрипт выводит сообщение об ошибке.
Теперь запустите скрипт с помощью команды python в терминале:
cd ~/project
python verify_import.py
Вы должны увидеть следующий вывод:
Module 'my_module' imported successfully.
Greeting: Hello, LabEx!
Если вы измените module_name на несуществующий модуль, например, "nonexistent_module", и запустите скрипт снова, вы увидите:
Failed to import module 'nonexistent_module'.
Это демонстрирует, как использовать importlib для динамического импорта модулей и обработки возможных ошибок импорта. Это особенно полезно в ситуациях, когда вам нужно загружать модули на основе пользовательского ввода или файлов конфигурации.
Резюме
В этом практическом занятии (лабораторной работе) вы узнали о импорте модулей в Python. Вы создали модуль с именем my_module.py, содержащий функцию greet и переменную PI. Затем вы создали файл main.py для импорта my_module и использования его содержимого, тем самым продемонстрировав, как оператор import добавляет модули в вашу программу и как обращаться к функциям и переменным внутри них с помощью точечной нотации.
Вы также начали изучать словарь sys.modules, который содержит все модули, импортированные в текущую сессию Python, и является важной частью системы импорта модулей Python.



