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

Python项目中callback.py无法导入父目录Logger类的问题求助

解决callback.py无法导入父目录logger.py中Logger类的问题

这种情况我之前开发Python项目时也遇到过,结合你描述的“能导入其他父目录模块但唯独Logger不行”的情况,咱们从几个常见方向排查解决:

1. 先检查最基础的拼写与定义问题

  • 确认logger.py里的类名确实是大写开头的Logger:Python是大小写敏感的,别不小心写成了logger或者LOGGER。
  • 检查Logger类是不是被定义在某个条件分支里(比如if __name__ == "__main__":代码块内部),如果是这样,其他模块导入时根本看不到这个类。
  • 查看logger.py本身有没有语法错误——如果模块加载失败,也会间接导致找不到类的错误。

2. 排查循环导入问题

这是最容易被忽略的点:如果logger.py里也导入了callback.py(或者导入了依赖callback.py的其他模块),就会形成循环导入。此时Python在加载模块时,Logger类还没完成定义就被callback.py引用,就会抛出ImportError: cannot import name 'Logger'。

解决方法:

  • 重构代码,把循环依赖的部分抽成独立的小模块;
  • 或者把导入语句移到函数内部(延迟导入),避免模块级别的循环依赖。

3. 调整导入方式与Python路径

虽然你能导入其他父目录模块,但可能logger.py的导入场景有差异,试试这两种方式:

方式一:使用相对导入

如果你的项目是作为包来运行的(不是直接执行callback.py),可以用相对导入:

from ..logger import Logger

⚠️ 注意:如果直接运行python web/callback.py,相对导入会报错,因为此时callback.py被当作顶层脚本,不是包的一部分。

方式二:手动添加项目根目录到Python路径

在callback.py的最开头添加以下代码,把项目根目录加入Python的搜索路径,然后再正常导入:

import sys
from pathlib import Path

# 获取项目根目录(web目录的父目录)
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

from logger import Logger

4. 确认导入的是正确的logger.py

有可能你的环境里存在其他同名的logger.py(比如第三方库或者其他目录下的文件),导致Python导入了错误的模块。可以先在callback.py里打印模块路径确认:

import logger
print(logger.__file__)

如果输出的路径不是你项目根目录下的logger.py,就需要调整导入的优先级或者重命名你的logger.py(比如改成project_logger.py)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:57