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

Python 3.7.9跨目录导入类失败,加__init__.py仍报ModuleNotFoundError

问题分析与解决方案

首先先修正你提供的目录结构排版(确保层级正确):

Application/
├── __init__.py
├── CLS/
│   ├── __init__.py
│   └── Article.py
└── OUT/
    ├── __init__.py
    └── publish.py

你遇到的导入错误,核心原因是Python的模块搜索机制(sys.path)和包结构识别规则导致的,以下是具体拆解和解决方法:

错误原因

  1. sys.path 未包含根目录
    Python默认只会把运行脚本的所在目录加入sys.path。如果你直接在Application/OUT/目录下运行publish.py,sys.path里只有Application/OUT/,找不到Application或CLS模块;如果从其他目录运行,只要Application的父目录不在sys.path里,同样会找不到模块。

  2. 相对导入层级错误
    你用的...CLS.Article是上跳两级的相对导入,但OUT和CLS同属Application的子包,只需要上跳一级(..)即可。...会尝试超出顶级包(Application)的范围,直接触发错误。

  3. 直接运行脚本导致包结构失效
    如果你直接执行python publish.py,脚本会被当作独立文件而非Application.OUT包的一部分,此时相对导入规则不生效——Python不会把它识别为包的成员。

解决方法

方法1:临时调整sys.path(快速验证)

在publish.py开头添加代码,把Application目录加入Python的模块搜索路径:

import sys
import os
# 获取Application目录的绝对路径
app_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(app_root)

# 现在可以正常导入
from CLS.Article import Article

方法2:用相对导入+包模式运行(推荐)

修改publish.py的导入语句为正确的相对路径:

from ..CLS.Article import Article

然后从Application的父目录运行脚本,用-m参数指定包模块:

python -m Application.OUT.publish

这种方式会让Python把整个Application当作完整包处理,相对导入规则正常生效。

方法3:设置环境变量(持久化)

把Application的父目录添加到PYTHONPATH环境变量:

  • Linux/macOS终端:
    export PYTHONPATH="/path/to/Application/parent:$PYTHONPATH"
    
  • Windows命令行:
    set PYTHONPATH=C:\path\to\Application\parent;%PYTHONPATH%
    

设置完成后,无论在哪里运行脚本,都可以用第一种方式正常导入:

from Application.CLS.Article import Article

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:55:22