【问题标题】:How to do multiple imports in Python?如何在 Python 中进行多次导入?
【发布时间】:2011-03-16 16:37:43
【问题描述】:

在 Ruby 中,我不会多次重复“require”(Python 中的“import”)这个词,而是这样做

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

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

直截了当的“翻译”类似于以下代码。无论如何,由于 Python 不导入命名为字符串的库,所以它不起作用。

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

提前致谢

【问题讨论】:

  • Python 实际上确实有一个内置函数__import__,您可以使用它来导入以字符串命名的模块。但它应该从import 语句的实现中调用,而不是从用户代码中调用。在这种情况下,这肯定不是正确的解决方案。
  • 哦!真的感谢所有的答案。都很好。

标签: python import iterator require


【解决方案1】:

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

import lib1, lib2, lib3, lib4, lib5

如果您确实需要基于动态变量以编程方式导入,那么您的 ruby​​ 的字面翻译应该是:

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】:

      如果你想要多行:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            我今天刚从一位同事那里得知,根据PEP 8 Style Guide,Python 中的导入实际上应该写在单独的行中:

            import os
            import sys
            

            风格指南调用import sys, os错误。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-02-07
              • 2016-09-01
              • 2021-10-19
              • 2019-08-11
              • 1970-01-01
              相关资源
              最近更新 更多