news 2026/7/11 1:48:42

记录BUG:开发violet_agents过程中出现Python的循环导入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记录BUG:开发violet_agents过程中出现Python的循环导入

记录BUG:开发violet_agents过程中出现Python的循环导入

问题复现

在测试violet_agents包时,我们输入以下代码测试

fromviolet_agentsimportSimpleAgentfromviolet_agentsimportVioletAgentsLLMfromdotenvimportload_dotenv load_dotenv()agent=SimpleAgent(name="helloAgent",llm=VioletAgentsLLM(provider="deepseek"),system_prompt="你是一个简单的助手,直接回答用户的问题,不进行复杂的思考和计划。")response=agent.run("你好,1 + 1 等于多少?")print(response.content)

运行该文件后,会报错,报错如下

Traceback (most recent call last): File "d:\programming\Python\test_violet_agent\main.py", line 1, in <module> from violet_agents import SimpleAgent File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\__init__.py", line 4, in <module> from .agents.react_agent import ReactAgent, REACT_PROMPT File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\agents\__init__.py", line 2, in <module> from .simple_agent import SimpleAgent File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\agents\simple_agent.py", line 4, in <module> from ..core.config import Config File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\core\__init__.py", line 2, in <module> from .agent import Agent File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\core\agent.py", line 10, in <module> from ..tools.registry import ToolRegistry File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\tools\__init__.py", line 3, in <module> from .builtin import WeatherTool, SkillsTool, SearchToolsTool, TerminalTool File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\tools\builtin\__init__.py", line 4, in <module> from .search_tools_tool import SearchToolsTool File "D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\tools\builtin\search_tools_tool.py", line 7, in <module> from ...core.agent import Agent, SubAgent ImportError: cannot import name 'Agent' from partially initialized module 'violet_agents.core.agent' (most likely due to a circular import) (D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\core\agent.py)

遇到报错,不着急,顺藤摸瓜。

追踪报错

先看报错最后一行,明确错误类型和原因

ImportError: cannot import name 'Agent' from partially initialized module 'violet_agents.core.agent' (most likely due to a circular import) (D:\programming\Python\test_violet_agent\.venv\lib\site-packages\violet_agents\core\agent.py)
  • 错误类型ImportError– 导入失败。
  • 具体原因:无法从violet_agents.core.agent中导入Agent,而且模块处于“部分初始化”状态,很可能是因为循环导入(circular import)

从下往上读,定位循环链条

Traceback 是从最底层(错误发生点)向上(调用入口)排列的,最后一行是错误本身,而上面每一行都显示了导入过程中的一环

File "...\search_tools_tool.py", line 7, in <module> from ...core.agent import Agent, SubAgent
  • 这里试图从core.agent导入Agent,是直接触发错误的地方

再往上看,是谁导入了search_tools_tool.py

File "...\tools\builtin\__init__.py", line 4, in <module> from .search_tools_tool import SearchToolsTool
  • builtin/__init__.py导入了search_tools_tool

继续:

File "...\tools\__init__.py", line 3, in <module> from .builtin import WeatherTool, SkillsTool, SearchToolsTool, TerminalTool
  • tools/__init__.py导入了builtin包。

再往上:

File "...\core\agent.py", line 10, in <module> from ..tools.registry import ToolRegistry
  • 我们发现core/agent.py里导入了tools.registry,而tools包又导入了builtin包,进而导入了search_tools_tool,而它又反过来导入core.agent——这就形成了循环。这种情况是间接循环导入,由这几个__init__.py把路铺成了闭环,简单说,就是search_tools_tool.py在执行from ...core.agent import Agent, SubAgent时,回头找还没定义完的core/agent.py

解决方法

core/agent.py

  • from ..tools.registry import ToolRegistry从顶层导入移入TYPE_CHECKING
  • __init__中改用懒加载:from ..tools.registry import ToolRegistry as _ToolRegistry
  • 消除了core.agenttools.builtin.search_tools_tool之间的潜在循环导入

修改如下:

检查/防止循环导入的方法

方法一:pip install pylint

使用命令进行检查

pip install pylint pylint src/violet_agents pylint src/violet_agents --disable=all --enable=cyclic-import

方法二:pip install import-linter

/violet_agents
pylint src/violet_agents --disable=all --enable=cyclic-import

### 方法二:`pip install import-linter` 这是大型 Python 项目经常使用的工具。此处不做过多介绍
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 1:48:35

防火玻璃门经常验收不通过?重点把控这几项施工细节

在办公楼、商业综合体、住宅小区消防工程验收阶段&#xff0c;防火玻璃门验收不合格是十分普遍的问题。很多工程采购方和施工人员只看重门扇外观好看&#xff0c;忽略国标规范细节&#xff0c;最后出现返工整改、延误整体工程进度的情况。本文依据GB12955‑2024新版防火门国家标…

作者头像 李华
网站建设 2026/7/11 1:48:12

STM32F723ZE与TPA3128D2构建高性能数字音频系统

1. 项目概述&#xff1a;打造高性能数字音频系统 在数字音频处理领域&#xff0c;如何将高质量音频信号高效地转换为震撼人心的声音输出&#xff0c;一直是工程师们追求的目标。这个项目通过结合ST公司的STM32F723ZE高性能微控制器和TI的TPA3128D2 D类音频功放&#xff0c;构建…

作者头像 李华
网站建设 2026/7/11 1:45:26

拉丁超立方采样 MATLAB 2024b 实现:2维与7维空间10样本生成对比

拉丁超立方采样 MATLAB 2024b 实现&#xff1a;2维与7维空间10样本生成对比在工程仿真和实验设计中&#xff0c;如何高效地从多维参数空间中抽取具有代表性的样本是一个关键问题。拉丁超立方采样&#xff08;Latin Hypercube Sampling, LHS&#xff09;作为一种分层随机抽样技术…

作者头像 李华
网站建设 2026/7/11 1:45:20

TLP241A与PIC18LF4585的电气隔离设计实践

1. 项目背景与核心需求 在工业控制和电力电子系统中&#xff0c;电气隔离是确保安全性和可靠性的关键技术。TLP241A作为东芝的光隔离固态继电器&#xff0c;与PIC18LF4585微控制器的组合&#xff0c;为解决高压侧与低压侧之间的信号隔离提供了高效方案。这个设计特别适用于需要…

作者头像 李华
网站建设 2026/7/11 1:42:51

如何通过自然语言描述自动生成微服务API端点代码

1. 引言&#xff1a;从自然语言到代码的自动化在微服务开发中&#xff0c;定义和实现API端点是一个重复性高、容易出错的过程。开发者需要编写控制器&#xff08;Controller&#xff09;、服务层&#xff08;Service&#xff09;、数据模型&#xff08;Model&#xff09;以及相…

作者头像 李华