2014-12-08 1 views
1

Я пытаюсь импортировать модуль, __import__ как это:Confused о __import__ в Python

>>> mod = __import__('x.y.z') 

Но я только получил x:

>>> print mod 
>>> <module 'x' from '...'> 

Как я должен сделать, чтобы импортировать z? Я пробовал вот так, это работает, но я не знаю, почему.

>>> mod = __import__('x.y.z', {}, {}, ['']) 
>>> print mod 
>>> <module 'x.y.z' from '...'> 

Я действительно путают об этом, и я понятия не имею, с параметрами globals и locals.

Thx много!

+0

Будут ли имена модулей переменными? Если они такие строки, как здесь, просто используйте простой «импорт». – Evert

+0

Мы не можем ответить на ваш вопрос по глобальным и местным жителям, пока вы не представите пример, где у вас возникла проблема. – Evert

+0

Мне нужно загрузить модуль и все его подмодули из заданного пути модуля, а второй - хорошо из документа docs '(__import __)', ', когда задан непустой аргумент listlist, модуль, названный по имени, вернулся. «Я думаю, что это был способ решить мою проблему. thx a lot –

ответ

0

Соответствующие примечания from the docs (__import__):

Когда имя переменной имеет вид package.module, как правило, пакет верхнего уровня (имя до до первой точки) возвращается , а не модуль по имени. Однако, когда задан непустой аргумент fromlist, возвращается модуль с именем по имени.

Таким образом, это похоже на написание import x.y.z который также делает x доступной (а также x.y и x.y.z).

+0

', когда задан непустой аргумент fromlist, возвращается модуль с именем по имени. Возможно, поэтому второй работает хорошо, thx! –

0

Используйте вместо этого модуль importlib. Из которых голые кости доступны в 2.7.

import importlib 
z = importlib.import_module("z", "x.y") 
# equivalent to 
from x.y import z