无法导入模块
问题现象
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包。
处理方法
- 训练作业导入模块时日志出现前两条报错信息,处理方法如下:
- 首先保证被导入的module中有“__init__.py”存在,创建“module_dir”的“__init__.py”,如原因分析中的结构所示。
- 由于无法知晓“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')