Some of my code use the now deprecated imp package to find a module
toolboxFile, toolboxPath, toolboxDescription = imp.find_module(\"Tools\")
I found this worked as a replacement for imp.find_module()
importlib.machinery.PathFinder().find_spec(modName, modDirList)
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")
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.
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.