背景
-
报错提示:
ModuleNotFoundError: No module named 'xxx'
-
项目结构:
-
import相关代码:
from proto.VCProto_pb2 import *
from live_service.base import TestBase, S2STestBase
原因
- 原理:导入一个模块时,import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中:
sys.path
。 - 入口为
main.py
,其工作目录(os.getcwd()
)为:live_service
,无法找到zabbix_monitor
一层的代码,当然会报错。
解决方案
-
使用
sys.path.append()
:把zabbix_monitor
的路径加入环境变量
代码:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR)
-
改变项目结构,使入口(
main.py
)的工作目录为zabbix_monitor
。