Как преобразовать строки в переменные для импорта? питон
Я могу использовать следующий код, чтобы изменить строку на переменную, а затем вызвать функцию библиотеки, которая была ранее импортирована.
>>> import sys
>>> x = 'sys'
>>> globals()[x]
<module 'sys' (built-in)>
>>> globals()[x].__doc__
Без предварительного импорта модуля у меня есть строка в переменную, но я не могу использовать то же самое globals()[var]
синтаксис с import
:
>>> y = 'os'
>>> globals()[y]
<module 'os' from '/usr/lib/python2.7/os.pyc'>
>>> import globals()[y]
File "<stdin>", line 1
import globals()[y]
^
SyntaxError: invalid syntax
>>> z = globals()[y]
>>> import z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named z
Возможно ли для ввода строки и импортировать библиотеку, имя которой совпадает с именем ввода строки? Если так, то как?
@ndpu и @paulobu ответили, что __import__()
разрешает доступ к библиотеке в виде переменной. Но есть ли проблема с использованием одного и того же имени переменной вместо использования альтернативы для библиотеки? Например:
>>> x = 'sys'
>>> sys = __import__(x)
3 ответа
Большинство Python-кодеров предпочитают использовать importlib.import_module
вместо __import__
:
>>> from importlib import import_module
>>> mod = raw_input(":")
:sys
>>> sys = import_module(mod)
>>> sys
<module 'sys' (built-in)>
>>> sys.version_info # Just to demonstrate
sys.version_info(major=2, minor=7, micro=5, releaselevel='final', serial=0)
>>>
Вы можете прочитать о предпочтениях importlib.import_module
над __import__
здесь
Использование __import__
функция:
x = 'sys'
sys = __import__(x)
Ты ищешь __import__
встроенная функция:
__import__(globals()[y])
Основное использование:
>>>math = __import__('math')
>>>print math.e
2.718281828459045
Вы также можете посмотреть в importlib.import_module
как предложено в другом ответе и в __import__
Документация.