What is the equivalent of imp.find_module in importlib

后端 未结 3 1610
闹比i
闹比i 2021-02-05 03:03

Some of my code use the now deprecated imp package to find a module

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

相关标签:
3条回答
  • 2021-02-05 03:25

    I found this worked as a replacement for imp.find_module()

    importlib.machinery.PathFinder().find_spec(modName, modDirList)
    
    0 讨论(0)
  • 2021-02-05 03:31

    According to Python official documentation in this page imp

    find_module Deprecated since version 3.3 Use importlib.util.find_spec() instead unless Python 3.3 compatibility is required, in which case use importlib.find_loader().

    Use importlib.util.find_spec("Tools") for find spec for more information you can see this link.

    And use importlib.find_loader("Tools") for find loader more information

    EDIT:

    sample code

    import importlib
    import importlib.util
    import sys
    
        name="test"
        moduledir="d:\\dirtest"
    # this is optional set that if you what load from specific directory
        try:
            spec = importlib.util.find_spec(name,moduledir)
            if spec is None:
                print("Import error 0: " + " module not found")
                sys.exit(0)
            toolbox = spec.loader.load_module()
        except (ValueError, ImportError) as msg:
            print("Import error 3: "+str(msg))
            sys.exit(0)
    
        print("load module")
    
    0 讨论(0)
  • 2021-02-05 03:33

    Same folder

    If the module is in your working directory, importlib.util.find_spec probably suffices for your purposes.

    For example if you just want to load the module, you can use:

    • deprecated in Python 3.5 and higher:

      toolbox_specs = importlib.util.find_spec("Tools")
      toolbox = toolbox_specs.loader.load_module()
      
    • introduced in Python 3.5 and higher:

      toolbox_specs = importlib.util.find_spec("Tools")
      toolbox = importlib.util.module_from_spec(toolbox_specs)
      toolbox_specs.loader.exec_module(toolbox)
      

      Caveat: I haven’t tested this, but it’s straight from the documentation, so I suppose it works.

    You can assess several other properties with the toolbox_specs object. However, e.g., a corresponding file object is not amongst them. If you really need this in Python 3, you probably have to obtain the file’s path and open it with other methods.

    Different folder

    To find a module in a different folder, you have to work with a FileFinder, which in turn needs to know the module’s type. For example, if your module is an extension, you can find the specs as follows:

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

    You can then process toolbox_specs as described above.

    0 讨论(0)
提交回复
热议问题