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

即便存在__init__.py仍无法跨目录导入Python文件如何解决

Python导包提示No module named 'utils'解决方案

问题根因与对应解决方案

1. 包标识文件命名错误

你当前utils文件夹下的初始化文件命名为__init_.py,不符合Python规范,正确命名应为前后各2个下划线的__init__.py。该文件是Python将文件夹识别为可导入包的必要标识,修改文件名后可解决第一类识别问题。

2. 模块搜索路径未包含utils父目录

Python导入包时仅会查找sys.path列表中收录的路径,若utils文件夹的父目录不在该列表中就会触发找不到模块的报错,可通过以下任意一种方式解决:

  • 临时添加路径到sys.path
    在你调用utils的业务脚本最开头添加如下代码,手动将utils所在的父目录加入搜索路径:
import sys
import os
# 假设你的业务脚本存放在 项目根目录/业务文件夹/xxx.py,utils存放在项目根目录/utils
# 以下代码会自动计算项目根目录的绝对路径并加入搜索列表
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

如果你的目录层级不同,调整os.path.dirname的调用次数即可,最终要保证加入的路径是utils文件夹所在的上一级目录。

  • 以模块方式运行脚本
    进入项目根目录(也就是utils文件夹所在的目录),执行命令时使用-m参数指定模块路径,例如你的业务脚本存放在test/run.py,则执行:
    python -m test.run
    该运行方式会自动将当前工作目录加入sys.path,可直接识别utils包。
  • 全局安装工具包
    如果该utils是通用工具,可将其移动到Python的site-packages目录下,所有Python脚本都可以直接导入使用。

额外注意事项

你报错信息中显示当前运行的文件名为readData.py,和你要导入的utils下的readData.py重名,会导致导入冲突,建议修改业务脚本的文件名,避免和依赖模块重名。

另外你当前的业务代码仅创建了ProcessJsonFile的实例,没有调用读取方法,如果需要输出json内容可以修改为:

from utils import readData

def execute():
   processor = readData.ProcessJsonFile("test.json")
   processor.readFileData()


if __name__ == "__main__":
    execute()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:00