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

Python如何通过__init__.py导入同级包模块并解决引用报错

问题根因梳理

你碰到的报错主要由3类问题导致:

  • 文件名/模块名拼写不统一
  • 各层级__init__.py的导入路径指向错误
  • 相邻包的相对导入规则使用错误

修复步骤

1. 统一所有拼写

首先修正所有拼写不一致的低级错误:

  • main.py里的from utils import *改成from util import *,你的包名是util不是utils
  • data/data_loader.py里的from util.stringUtils import StringUtil改成from util.stringUtil import StringUtil,你的文件名是stringUtil.py不是stringUtils.py
  • data/data_loader.py里的类定义漏了冒号:class DataLoader()改成class DataLoader():

2. 修正各层级__init__.py的导入逻辑

你之前的__init__.py导入的模块名不存在,按以下修改:

根目录src/__init__.py

不需要额外写导入内容,留空即可,只要文件存在就能标记src为Python可识别的包目录

data/__init__.py

要把data_loader.py里的类导出,修改为:

from .data_loader import DataLoader

如果要导出该文件所有内容可以写from .data_loader import *,显式声明导出的类更便于维护

util/__init__.py

要把stringUtil.py里的类导出,修改为:

from .stringUtil import StringUtil

3. 修正跨包导入的路径(可选,兼容不同运行方式)

如果你是直接在src目录下运行python main.py,data_loader.py里的导入可以保持from util.stringUtil import StringUtil;如果要更规范支持从项目根目录运行,也可以改成相对导入:

from ..util.stringUtil import StringUtil

4. 修正main.py的冗余代码

你写的def __init__()是无效代码,Python不会自动执行这个函数,直接写执行逻辑即可:

from data import *
from util import *

if __name__ == "__main__":
    print(StringUtil.substringRight("Hello world!", "l"))
    loader = DataLoader("C:/SOME/PATH/")

验证运行

进入src目录,执行python main.py即可正常运行,不需要额外修改sys.path,所有类都可以正常识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:00