Linux Gazette на русском | Выпуск #177 |
Тираж 10611 экз.
Здравствуйте! В этом выпуске Вашему вниманию предлагается
небольшая статья, которая
описывает приёмы использования плагинов в программах на Python.
Надеюсь, преимущества
использования такой технологии никому объяснять не надо? :-)
Спасибо Вадиму Хохлову!
Александр Куприн
Поддержка плагинов в программах на
Python
Автор: Вадим
Хохлов
Введение
В настоящее время множество программ поддерживают работу с плагинами
(дополнительными модулями). Такая поддержка позволяет делать программы
более
гибкими и расширяемыми. В качестве примера можно привести известный
медиапроигрыватель XMMS.
Существует библиотека dl, которая используется при
разработке программ, поддерживающих механизм плагинов. О ее применении
можно узнать из статьи
"Добавление
модулей
расширения (плагинов) к программе", автор Tom Bradley.
В данной статье будет рассмотрен метод работы с плагинами в
программах
на Python.
Теория
Язык Python имеет встроенную поддержку модулей. В стандартную
библиотеку
Python'а входит множество модулей, содержащих функции для работы с
операционной системой, протоколами и форматами, активно используемыми в
сети
Интернет, строками, базами данных и т.п.
Для подключения модулей в программу (которая тоже не что иное как
модуль)
используется инструкция import. Например, следующая
строка
загружает модуль fibo, который находится в файле fibo.py (пример взят
из книги "Язык
программирования Python"):
import fibo
При импорте модулей интерпретатор ищет файл с соответствующим именем
в
текущем каталоге, затем в каталогах, которые указанны в переменной
PYTHONPATH, затем в путях по умолчанию (переменная окружения PATH).
Большинство программ на Python начинаются со строк, в которых с
помощью
данной инструкции и ее вариантов загружаются необходимые модули.
Имеется также возможность определить имя модуля динамически во время
работы программы и загрузить его с помощью встроенной функции
__import__.
Постановка задачи
Пусть необходимо разработать программу, которая в зависимости от
подключенного
плагина показывает в главном окне различные органы управления:
Плагин должен выбираться с помощью выпадающего списка. При нажатии
на кнопку
"get info" на экран будет выводиться некоторая информация о состоянии
текущего
плагина.
Решение
Сначала напишем модули плагинов. Будем использовать PyQt для
создания
интерфейсных элементов. Ниже представлен модуль, создающий окно с
переключателем checkbox и меткой:
Оба модуля содержат функцию getPluginWidget,
возвращающую
виджет, который будет размещен в окне. У данного виджета есть метод
getInfo, возвращающий информацию о его состоянии.
Переменная __name__ содержит имя модуля. Если же
модуль
запускается из командной строки, а не импортируется, эта переменная
имеет
значение __main__. Используя подобный фрагмент, можно
выполнить отладку модуля отдельно и только потом его импортировать в
программу.
Загрузка плагинов выполняется в методе
slotToolChanged.
Сначала мы проверяем, загружался ли модуль ранее. Если да, то заново
его
считываем и инициализируем с помощью функции reload.
Иначе модуль импортируется функцией __import__. После
загрузки модуля внутри groupbox'а создается окно плагина.
Так как эта программа создавалась лишь с демонстрационными целями, я
намеренно не добавлял обработку ошибок.
Заключение
Таким образом, встроенные возможности Python'а позволяют довольно
легко разрабатывать программы, поддерживающие механизм плагинов.
Об авторе
Я работаю программистом и преподаю в Херсонском
государственном техническом университете. С Linux
знаком с 1999 года. Общаюсь с ним, в основном, дома. Кроме этого, я
являюсь
разработчиком IceWM Control
Center - набора
программ (в том числе и скриптов icerrun) для настройки различных
параметров IceWM.
Мои хобби - игра в Что?Где?Когда?, аквариум, коты.
Команда переводчиков: Александр Куприн, Андрей Киселев, Александр Михайлов, Александр
Саввин,
Владимир Меренков, Владимир Средних, Иван Песин, Игорь Яровинский,
Павел Соколов,
Роман Шумихин, Сергей Скороходов, Юрий Прушинский, Юрий
Султанов
Со всеми предложениями, идеями и комментариями обращайтесь к
Александру Куприну (ru_classic at mail.ru).
Убедительная
просьба: указывайте сразу, не возражаете ли Вы против публикации
Ваших отзывов в рассылке.