You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环导入报错:ImportError: 无法从'idkom'模块导入'idkom'

解决Python循环导入导致的ImportError问题

你遇到的ImportError是典型的循环导入问题:setup.py在模块顶部尝试导入idkom.py中的idkom类,而idkom.py又在顶部尝试导入setup.py中的setup类(推测是笔误,实际应为Setup)。两个模块在初始化阶段互相依赖,导致模块无法完成加载,触发"partially initialized module"错误。

另外你的代码还存在无限递归问题:Setup的__init__会创建idkom实例并传入自身,而idkom的__init__又会创建Setup实例,即使导入问题解决,运行时也会栈溢出。

以下是三种可行的解决方案:

方案一:延迟导入+修正递归逻辑

将导入语句从模块顶部移到类的方法内部,避免模块加载时的循环依赖;同时修正递归逻辑,直接使用传入的实例而非重复创建。

修改后的setup.py:

class Setup:
    def __init__(self):
        # 延迟导入,仅在实例化时执行
        from idkom import idkom
        self.Idkom = idkom(self)
        while True:
            self.Idkom.print()

修改后的idkom.py:

class idkom:
    # 接收外部传入的Setup实例,无需重复创建
    def __init__(self, setup_instance):
        self.Setup = setup_instance

    def print(self):
        print("Hello")

方案二:合并模块

如果两个类逻辑紧密耦合,直接将它们放到同一个模块中,从根源上消除导入问题:

创建main.py:

class Setup:
    def __init__(self):
        self.Idkom = idkom(self)
        while True:
            self.Idkom.print()

class idkom:
    def __init__(self, setup_instance):
        self.Setup = setup_instance

    def print(self):
        print("Hello")

# 程序入口
if __name__ == "__main__":
    Setup()

方案三:导入整个模块而非单个类

保持模块拆分,但改为导入整个模块,避免直接导入未初始化的类:

修改后的setup.py:

import idkom

class Setup:
    def __init__(self):
        self.Idkom = idkom.idkom(self)
        while True:
            self.Idkom.print()

修改后的idkom.py:

import setup

class idkom:
    def __init__(self, setup_instance):
        self.Setup = setup_instance

    def print(self):
        print("Hello")

内容的提问来源于stack exchange,提问作者barteksh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:35:29