【问题标题】:importlib not working for files in subdirectoryimportlib 不适用于子目录中的文件
【发布时间】:2019-12-10 07:54:36
【问题描述】:

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

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

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

test.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

【问题讨论】:

  • 包含 test.py 和 dir1 的文件夹也应该有__init__.py
  • 为什么不使用from dir1.dir2 import myfile as module
  • 是的,init.py 与 test.py 并列,我在问题中提到了 dir1 中的 init.py。跨度>
  • import_module() 接受带点的模块路径,而不是文件名。
  • 正如@AKX 所说,您需要将虚线路径传递给要导入的文件importlib.import_module('dir1.dir2.myfile')

标签: python python-3.7 python-importlib


【解决方案1】:

为了清楚起见,再次重申:

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

【讨论】:

  • 是的,想通了。
猜你喜欢
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
相关资源
最近更新 更多