首页 > 解决方案 > importlib 不适用于子目录中的文件

问题描述

我有一个这样的目录结构:

__init__.py
test.py
dir1/
    __init__.py
    dir2
        __init__.py
        myfile.py

dir2 中可能有更多的 py 文件。所以我想在运行时导入它们并加载这些文件中定义的所有类。

测试.py:

import inspect
import importlib

module = importlib.import_module('dir1/dir2/myfile.py')
for name, obj in inspect.getmembers(module):
    if inspect.isclass(module):
        print(obj.id)   # id is defined in all the classes

这在执行 import_module 时给了我错误:

ModuleNotFoundError:没有名为“dir1/dir2/myfile”的模块

我尝试将 dir1/dir2 路径附加到 sys.path,然后导入 myfile.py,这也不起作用。类似的代码也有效,myfile.py 与 test.py 位于同一级别。

Python版本:3.7

标签: pythonpython-3.7python-importlib

解决方案


只是为了清楚起见重申:

import_module()只接受带点的模块路径,不接受文件名。例如,importlib.import_module('dir1.dir2.myfile')


推荐阅读