循环import问题

在依赖关系较多的模块中,进程会出现循环import 错误
topLevelPackage = _importAndCheckStack(trialname)
  File "/mnt/sharefile/ugs-cligw/cligw/tap.py", line 3, in <module>
    from . import share, ssh
  File "/mnt/sharefile/ugs-cligw/cligw/share.py", line 5, in <module>
    from cligw.proxy import CliGWClient
  File "/mnt/sharefile/ugs-cligw/cligw/proxy.py", line 8, in <module>
    from cligw.share import tcp_cligw
ImportError: cannot import name tcp_cligw
解决办法一般是 延迟导入模块
from twisted.internet import protocol
from twisted.protocols import policies
from lib import utils
# from cligw.share import tcp_cligw

# 延迟到使用tcp_cligw时再导入tcp_cligw
# ...
class CliGWProxy(utils.LogMixin, policies.TimeoutMixin, protocol.Protocol):
    def handle_DEVUP(self, *msg):
        """设备上行消息"""
        from cligw.share import tcp_cligw
        tcp_cligw.sendMessage("DEVUP", msg)

举例具体说明
# a.py
# -----------
class A(object):
   b = B()

# b.py
# --------
class B(object):
   a = A()

# 一般修改为:
# a.py
# -----------
from b import B
class A(object):
   b = B()

# b.py
# --------
class B(object):
   from a import A # 用到的时候再import
   a = A()

你可能感兴趣的:(循环import)