
# 无法导入模块
#### 问题现象
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')
  ```
  
 
