如何在Python中进行多次导入?

时间:2010-07-15 22:28:10

标签: python import iterator require

在Ruby中,我没有多次重复“require”(Python中的“import”),而是

%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }

因此,它遍历“libs”和“require”(导入)它们中的每一个。现在我正在编写一个Python脚本,我想做类似的事情。有没有办法,或者我需要为所有人写“导入”。

直接的“traduction”将类似于以下代码。无论如何,因为Python不会导入名为字符串的库,所以它不起作用。

requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
    import lib

提前致谢

6 个答案:

答案 0 :(得分:41)

对于已知模块,只需用逗号分隔:

import lib1, lib2, lib3, lib4, lib5

如果你真的需要以编程方式导入基于动态变量,你的ruby的字面翻译将是:

modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
    globals()[lib] = __import__(lib)

虽然在你的例子中没有必要这样做。

答案 1 :(得分:16)

试试这个:

import lib1, lib2, lib3, lib4, lib5

您也可以通过这种方式更改导入的名称,如下所示:

import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5

答案 2 :(得分:8)

import lib1, lib2, lib3, lib4, lib5

答案 3 :(得分:4)

您可以使用__import__函数从包含模块名称的字符串导入。

requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
    x = __import__(lib)

答案 4 :(得分:1)

如果您有表示模块的字符串列表,则可以使用__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)>

答案 5 :(得分:0)

如果要多行显示:

from englishapps.multiple.mainfile import (
    create_multiple_,
    get_data_for_multiple
)