更新时间:2022-12-08 GMT+08:00
分享

无法导入模块

问题现象

ModelArts训练作业导入模块时日志报错:

Traceback (most recent call last):File "project_dir/main.py", line 1, in <module>from module_dir import module_file
ImportError: No module named module_dir
ImportError: No module named xxx

原因分析

  • 训练作业导入模块时日志出现前两条报错信息,可能原因如下:

    代码如果在本地运行,需要将“project_dir”加入到PYTHONPATH或者将整个“project_dir”安装到“site-package”中才能运行。但是在ModelArts可以将“project_dir”加入到“sys.path”中解决该问题。

    使用from module_dir import module_file来导包,代码结构如下:

    project_dir
    |- main.py
    |- module_dir
    |  |- __init__.py
    |  |- module_file.py
  • 训练作业导入模块时日志出现“ImportError: No module named xxx”的报错,可以判断是环境中没有包含用户依赖的python包。

处理方法

  • 训练作业导入模块时日志出现前两条报错信息,处理方法如下:
    1. 首先保证被导入的module中有“__init__.py”存在,创建“module_dir”“__init__.py”,如原因分析中的结构所示。
    2. 由于无法知晓“project_dir”在容器中的位置,所以利用绝对路径,在“main.py”中将“project_dir”添加到“sys.path”中,再导入:
      import os
      import sys
      # __file__为获取当前执行脚本main.py的绝对路径
      # os.path.dirname(__file__)获取main.py的父目录,即project_dir的绝对路径
      current_path = os.path.dirname(__file__)
      sys.path.append(current_path)
      # 在sys.path.append执行完毕之后再导入其他模块
      from module_dir import module_file
  • 训练作业导入模块时日志出现“ImportError: No module named xxx”的报错,请添加如下代码安装依赖包:
    import os
    os.system('pip install xxx')

相关文档