Я делаюPython __import__ только дает мне модуль верхнего уровня
module = __import__("client.elements.gui.button", globals(), locals(), [], 0)
Но это только возвращение client
.
В чем моя проблема?
Я делаюPython __import__ только дает мне модуль верхнего уровня
module = __import__("client.elements.gui.button", globals(), locals(), [], 0)
Но это только возвращение client
.
В чем моя проблема?
Это то, что __import__
.
Вы действительно не должны использовать __import__
; если вы хотите динамически импортировать модуль, используйте importlib.import_module
.
Принято ответ правильный, но если вы читаете в документации вы увидите, что это может быть удосужился с заведомо тревожным «взломать», используя __import__
так:
module = __import__('client.elements.gui.button', fromlist=[''])
Это Безразлично» действительно важно, что вы проходите за fromlist
, пока это не пустой список. Это сигнализирует о реализации по умолчанию __import__
, которую вы хотите импортировать в стиле from x.y.z import foo
, и это будет вернуть модуль, который вы используете.
Как указано, вместо этого вы должны использовать importlib
, но это все еще обходное решение, если вам необходимо поддерживать версии Python < 2.7.
Действительно интересный и отличный дополнительный ответ. – Drake
Он получает только верхний уровень, но вы также можете обойти это так:
module_name = 'some.module.import.class'
module = __import__(module_name)
for n in module_name.split('.')[1:]:
module = getattr(module, n)
# module is now equal to what would normally
# have been retrieved where you to properly import the file
Для Python 2.7 или более поздней версии, используйте [ 'importlib.import_module()'] (HTTP: // документы. python.org/2/library/importlib.html#importlib.import_module). –