Mar*_*arc 22 python python-3.x
我的一些代码使用现已弃用的imp包来查找模块
toolboxFile, toolboxPath, toolboxDescription = imp.find_module("Tools")
Run Code Online (Sandbox Code Playgroud)
使用包importlib获得相同结果的等效函数或代码是什么?
如果模块在您的工作目录中,importlib.util.find_spec可能就足够了.
例如,如果您只想加载模块,可以使用:
在Python 3.5及更高版本中弃用:
toolbox_specs = importlib.util.find_spec("Tools")
toolbox = toolbox_specs.loader.load_module()
Run Code Online (Sandbox Code Playgroud)在Python 3.5及更高版本中引入:
toolbox_specs = importlib.util.find_spec("Tools")
toolbox = importlib.util.module_from_spec(toolbox_specs)
toolbox_specs.loader.exec_module(toolbox)
Run Code Online (Sandbox Code Playgroud)
警告:我没有对此进行测试,但它直接来自文档,因此我认为它有效.
您可以使用该toolbox_specs对象评估其他几个属性.但是,例如,相应的文件对象不在其中.如果你真的需要在Python 3中使用它,你可能必须获取文件的路径并用其他方法打开它.
要在不同的文件夹中查找模块,您必须使用a FileFinder,而a 又需要知道模块的类型.例如,如果您的模块是扩展名,则可以按如下方式查找规范:
loader_details = (
importlib.machinery.ExtensionFileLoader,
importlib.machinery.EXTENSION_SUFFIXES
)
toolsfinder = importlib.machinery.FileFinder("Folder_of_Tools", loader_details)
toolbox_specs = toolsfinder.find_spec("Tools")
Run Code Online (Sandbox Code Playgroud)
然后,您可以toolbox_specs按上述方法进行处理.
我发现这可以替代 imp.find_module()
importlib.machinery.PathFinder().find_spec(modName, modDirList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5472 次 |
| 最近记录: |