Уведомления

Группа в Telegram: @pythonsu

#1 Июль 30, 2013 23:49:27

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить масив модулей пакета

Есть пакет (директория paket c файлами например __init__, file1.py, file2.py. file3.py). Нужно получить массив с ссылками на импортированные модули.
Попробовал такой вариант:

import paket
package_name_list = [attr for attr in dir(paket) if not attr.startswith('__')]
package_list = []
for package_name in package_name_list:
    package_list.append(getattr(paket, package_name))
Но какойто он глючный (первый раз все сработало а потом почемуто перестало работать - возввращает пустой список).

Офлайн

#2 Июль 31, 2013 06:42:56

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Получить масив модулей пакета

вроде все работает.

agryn
Есть пакет (директория paket c файлами например __init__, file1.py, file2.py. file3.py)
просто __init__ или __init__.py?

Офлайн

#3 Июль 31, 2013 10:14:39

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить масив модулей пакета

ilnur
__init__.py

Офлайн

#4 Июль 31, 2013 15:40:54

agryn
От: Украина
Зарегистрирован: 2011-12-14
Сообщения: 189
Репутация: +  0  -
Профиль   Отправить e-mail  

Получить масив модулей пакета

Кому интересно такой вариант заработал стабильно:

import os
import resources
import importlib
package_name_list = [attr[:-3] for attr in os.listdir(os.path.dirname(resources.__file__)) if not attr.startswith('__') and attr.endswith('.py')]
package_list = []
for package_name in package_name_list:
    package_list.append(importlib.import_module(resources.__name__ + '.' + package_name))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version