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

5t7ly7z5  于 2022-12-25  发布在  Python
关注(0)|答案(7)|浏览(116)

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

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

所以它迭代了一系列的“libs”和“require”(import),每一个,现在我在写一个Python脚本,我想做一些类似的事情,有没有办法,或者我需要为所有这些写“import”。
直接的“推导”就像下面的代码,无论如何,因为Python不导入以字符串命名的库,所以它不工作。

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

q0qdq0h21#

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

import lib1, lib2, lib3, lib4, lib5

如果你真的需要基于动态变量编程导入,你的ruby的直译应该是:

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

尽管在您的示例中不需要这样做。

wfsdck30

wfsdck302#

试试这个:

import lib1, lib2, lib3, lib4, lib5

您还可以通过这种方式更改导入它们时使用的名称,如下所示:

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

irlmq6kh3#

如果需要多行:

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

icnyk63a5#

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

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

brc7rcf06#

我今天刚从一位同事那里了解到,根据PEP 8样式指南,Python中的导入实际上应该写在单独的行中:

import os
import sys

样式指南错误地调用import sys, os

de90aj5v

de90aj5v7#

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

相关问题