Нужно было реализовать что-то типа плагинов: есть скрипт, представляющий из себя основу, и набор модулей для этой основы, для разных сервисов. То есть появился новый сервис - написал модуль, закинул в папку к скрипту - всё работает. Делается это довольно просто с помощью функции
__import__:
module = "common_module" // название файла модуля
dyn_module = __import__(module)
Class = dyn_module.Dyn_Class // Dyn_Class - класс из модуля
...и ловим много лулзов, если имя совпадает с другим модулем из stdlib/site-packages/чем-либо-еще-из-sys.path. Для динамических импортов придумали специальный модуль: http://docs.python.org/library/imp.html
ОтветитьУдалитьПозвольте не согласиться.
ОтветитьУдалитьimp придумали скорее для работы с самим механизмом импорта. Например, при реализации своего import hook...
imp загружает модули, но не делает их регистрации. Прощай, модуль-синглетон!
__import__ — это именно импорт модуля. Правда, не очень удобный интерфейс. Попробуйте __import__('package.subpackage.module') для примера.
Удобный — в importlib. В 2.7 появился огрызок от этой библиотеки, содержащий importlib.import_module(name, package=None)
есть решения для этого
ОтветитьУдалитьhttp://jenyay.net/Programming/PyPlugins
http://habrahabr.ru/blogs/python/79513/
сейчас переписываю проект, хочу там ввести систему плагинов для расширения. выбрал yapsy для этого
http://yapsy.sourceforge.net/
Приходи снова общаться на форуме. Я ща сам активно питон изучаю ;) Постоянно есть вопросы
ОтветитьУдалить