Как сделать несколько импорта в Python?
В Ruby вместо повторения "require" ( "import" в Python) много раз, я делаю
%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }
Таким образом, он выполняет итерацию по множеству "libs" и "require" (импорт) каждого из них. Теперь я пишу Python script, и я хотел бы сделать что-то подобное. Есть ли способ, или мне нужно написать "import" для всех из них.
Прямая "передача" будет похожа на следующий код. Во всяком случае, поскольку Python не импортирует библиотеки с именами как строки, это не работает.
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
import lib
Заранее спасибо
Ответы
Ответ 1
Для известного модуля просто разделите их запятыми:
import lib1, lib2, lib3, lib4, lib5
Если вам действительно нужно программно импортировать на основе динамических переменных, буквальный перевод вашего рубина будет следующим:
modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
globals()[lib] = __import__(lib)
Хотя вам не нужно этого в вашем примере.
Ответ 2
Попробуйте следующее:
import lib1, lib2, lib3, lib4, lib5
Вы также можете изменить имя, которое они импортировали таким образом, например:
import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5
Ответ 3
import lib1, lib2, lib3, lib4, lib5
Ответ 4
Вы можете импортировать из строки, содержащей имя вашего модуля, с помощью функции __import__
.
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
x = __import__(lib)
Ответ 5
Вы можете использовать __import__
, если у вас есть список строк, представляющих модули, но он, вероятно, более чистый, если вы следуете подсказке в документации и используете importlib.import_module
напрямую:
import importlib
requirements = [lib1, lib2, lib3, lib4, lib5]
imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
У вас нет импортированных библиотек в качестве переменных, доступных таким образом, но вы можете получить к ним доступ через словарь imported_libs
:
>>> requirements = ['sys', 'itertools', 'collections', 'pickle']
>>> imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
>>> imported_libs
{'collections': <module 'collections' from 'lib\\collections\\__init__.py'>,
'itertools': <module 'itertools' (built-in)>,
'pickle': <module 'pickle' from 'lib\\pickle.py'>,
'sys': <module 'sys' (built-in)>}
>>> imported_libs['sys'].hexversion
50660592
Вы также можете обновить свой globals
, а затем использовать их, как будто они были импортированы "обычно":
>>> globals().update(imported_libs)
>>> sys
<module 'sys' (built-in)>