importlib 中 imp.find_module 的等价物是什么

新手上路,请多包涵

我的一些代码使用现已弃用的 imp 包来查找模块

toolboxFile, toolboxPath, toolboxDescription = imp.find_module("Tools")

使用 package importlib 获得相同结果的等效函数或代码是什么?

原文由 Marc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 577
1 个回答

同一文件夹

如果模块在您的工作目录中, importlib.util.find_spec 可能足以满足您的需要。

例如,如果你只想加载模块,你可以使用:

  • 在 Python 3.5 及更高版本中弃用:
   toolbox_specs = importlib.util.find_spec("Tools")
  toolbox = toolbox_specs.loader.load_module()

  • 在 Python 3.5 及更高版本中引入:
   toolbox_specs = importlib.util.find_spec("Tools")
  toolbox = importlib.util.module_from_spec(toolbox_specs)
  toolbox_specs.loader.exec_module(toolbox)

警告:我没有对此进行测试,但它直接来自 文档,所以我认为它可以工作。

您可以使用 toolbox_specs 对象评估其他几个属性。然而,例如,相应的文件对象不在其中。如果您在 Python 3 中确实需要它,您可能必须获取文件的路径并使用其他方法打开它。

不同的文件夹

要在不同的文件夹中查找模块,您必须使用 FileFinder ,而后者又需要知道模块的类型。例如,如果您的模块是一个扩展,您可以找到如下规格:

 loader_details = (
    importlib.machinery.ExtensionFileLoader,
    importlib.machinery.EXTENSION_SUFFIXES
    )

toolsfinder = importlib.machinery.FileFinder("Folder_of_Tools", loader_details)
toolbox_specs = toolsfinder.find_spec("Tools")

然后您可以处理 toolbox_specs 如上所述。

原文由 Wrzlprmft 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题