Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2013 15:08:07

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема с импортом через importlib.import_module()

Функция мне нужна в более широком применении(импортить модули в цикле с разных директорий). Тут покажу частный случай. python 3.3\windows

Вот же описание:

importlib.import_module(name, package=None) 
Import a module. The name argument specifies what module to import in absolute or relative terms (e.g. either pkg.mod or ..mod). If the name is specified in relative terms, then the package argument must be set to the name of the package which is to act as the anchor for resolving the package name (e.g. import_module('..mod', 'pkg.subpkg') will import pkg.mod).

The import_module() function acts as a simplifying wrapper around importlib.__import__(). This means all semantics of the function are derived from importlib.__import__(), including requiring the package from which an import is occurring to have been previously imported (i.e., package must already be imported). The most important difference is that import_module() returns the most nested package or module that was imported (e.g. pkg.mod), while __import__() returns the top-level package or module (e.g. pkg).

Вот обычнейший код:
>>>from importlib import import_module
>>>mod = import_module('D:\SCRIPTS\OTHERS\pers_dict.py')
 
 
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python33\lib\importlib\__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1505, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1522, in _find_and_load_unlocked
ImportError: No module named 'D:\\SCRIPTS\\OTHERS\\pers_dict'

Помогите одолеть проблему. Что не так делаю?

Отредактировано buddha (Авг. 30, 2013 15:08:55)

Офлайн

#2 Авг. 30, 2013 16:06:26

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема с импортом через importlib.import_module()

ЕМНИП то нужно так:

sys.path.append('D:\SCRIPTS\OTHERS')
mod = import_module('pers_dict')

Офлайн

#3 Авг. 30, 2013 17:21:21

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Проблема с импортом через importlib.import_module()

У меня так и сделано… Всё равно работает отвратительно.
Предположим есть 10 директорий. Обходим их в цикле, каждый раз добавляя и удаляя эту директорию из пути поиска модулей. В такой ситуации у меня только из первой директории импортируется модуль, а из остальных - нет. И ошибок не появляется, хотя , когда я пошел через дебагер, выползла ошибка.

Вернусь в текущему примеру.
Вот для чего тогда в доке это написано??:

The name argument specifies what module to import in absolute or relative terms

Офлайн

#4 Авг. 30, 2013 19:40:02

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проблема с импортом через importlib.import_module()

buddha
Вот для чего тогда в доке это написано?
Насколько я понимяю имеется в виду не путь к файлу а возможность указать какой именно модуль загружать, в виде ‘mod’ или ‘mod.submod’. Но насколько я помню у меня тоже с importlib что-то не срослось, я использовал imp для плагинов.

Офлайн

#5 Авг. 31, 2013 08:33:16

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Проблема с импортом через importlib.import_module()

> Предположим есть 10 директорий. Обходим их в цикле, каждый раз добавляя и удаляя эту директорию из пути поиска модулей. В такой ситуации у меня только из первой директории импортируется модуль, а из остальных - нет.

Покажите ваш код, а также список полных путей к этим категориям, а также список модулей, которые вы импортируете из каждой категории.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version