Я понимаю, что этот вопрос касается функции __import__()
, но я думаю, что пакет importlib
лучше всего подходит для импорта пакетов во время выполнения, если вы используете Python 2.7 или выше, как рекомендовано в doc * 1004.*:
Примечание: Программный импорт модулей должен использовать import_module () вместо этой функции.
Возможные ошибки: Это было введено в python 2.7:
Новое в версии 2.7.
Этот модуль является второстепеннымподмножество того, что доступно в более полнофункциональном пакете с тем же именем из Python 3.1, который обеспечивает полную реализацию импорта.Что здесь предоставлено, чтобы облегчить переход с 2.7 на 3.1.
В вашем случае вы можете использовать:
import importlib
messages = importlib.import_module('messages_en')
Кроме того, если вы хотите указатьимя пакета, тогда from messages import messages_en
может быть записано как:
importlib.import_module('.messages_en', 'messages')
Обратите внимание на .
в .messages_en
, используемом для относительного разрешения пути, как описано здесь :
... Аргумент name указывает, какой модуль импортировать в абсолютном или относительном выражении (например, pkg.mod или ..mod).Если имя указано в относительных терминах, то аргумент пакета должен быть установлен на имя пакета, которое должно выступать в качестве якоря для разрешения имени пакета (например, import_module ('.. mod', 'pkg.subpkg')будет импортировать pkg.mod).