от .импортировать x с помощью __import__? - PullRequest
2 голосов
/ 07 декабря 2011

Как мне добиться from . import x (импортировать модуль x из текущего пакета), используя __import__?

Вот некоторые попытки, которые не увенчались успехом:

>>> __import__('.', fromlist=['x'])
ValueError: Empty module name

>>> __import__('.x')
ValueError: Empty module name

Как этосделано с помощью __import__?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Семантика встроенной функции __import__ связана с байт-кодом, который интерпретатор генерирует из операторов import, и не особенно удобна для использования вручную.Если я правильно понимаю, к чему вы стремитесь, это делает то, что вы хотите:

name = 'x'
mod = getattr(__import__('', fromlist=[name], level=1), name)

В версиях Python, которые имеют importlib, вы могли бы такжебыть в состоянии убедить importlib.import_module делать то, что вы хотите, с меньшим уродством, но я не уверен, что таким способом можно получить семантику "from .".

2 голосов
/ 07 декабря 2011
__import__(__name__, fromlist=['x'])

Это должно дать вам то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...