In Ruby, instead of repeating the \"require\" (the \"import\" in Python) word lots of times, I do
%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }
You can use __import__
if you have a list of strings that represent modules, but it's probably cleaner if you follow the hint in the documentation and use importlib.import_module
directly:
import importlib
requirements = [lib1, lib2, lib3, lib4, lib5]
imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
You don't have the imported libraries as variables available this way but you could access them through the imported_libs
dictionary:
>>> 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
You could also update your globals
and then use them like they were imported "normally":
>>> globals().update(imported_libs)
>>> sys
<module 'sys' (built-in)>
For known module, just separate them by commas:
import lib1, lib2, lib3, lib4, lib5
If you really need to programmatically import based on dynamic variables, a literal translation of your ruby would be:
modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
globals()[lib] = __import__(lib)
Though there's no need for this in your example.
import lib1, lib2, lib3, lib4, lib5
You can import from a string which contains your module name by using the __import__ function.
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
x = __import__(lib)
Try this:
import lib1, lib2, lib3, lib4, lib5
You can also change the name they are imported under in this way, like so:
import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5