ImportError: cannot import name
2020-06-12 本文已影响0人
CW不要无聊的风格
背景
公司近期加强了代码规范性的审查,一些敏感信息不能直接暴露在代码中,因此,需要将这部分信息存入配置中心,然后实现一个类用作配置中心的接口,最后通过这个接口来获取需要的信息。
问题产生
我将用作接口的这个类写在了项目目录的某个已有文件utils.py中,并且实例化了一个对象ap_clinet,其它需要获取配置中心信息的文件均通过调用这个对象来实现。
现在,有另一文件run_service.py需要实例化这个类,于是,其文件头中有这么一行:
from xxx.utils import ap_client (xxx代表的是父路径)
于是就会进入到utils.py中,utils.py中有这么一行:
from .api import xxx
接着便进入到api.py中,但是在api.py文件头中有这么一行:
from .utils import ap_client
于是,就来了这么一出戏:
ImportError: cannot import name 'ap_client'
解析
因为utils.py调用了api.py的东西,而api.py又需要调用utils.py的ap_client,而这时候utils.py里的ap_client还没有生成,于是就报错了。
解决措施
很简单,将ap_client单独写在另一个文件就好,这个文件不依赖任何其它文件的模块。