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

Python3导入上级目录文件报错:ImportError: 相对导入无已知父包

Python相对导入报错:ImportError: attempted relative import with no known parent package

问题详情

运行TES.py时触发如下错误:

Traceback (most recent call last):
  File "/Users/apzuba/Documents/Programowanie/FOLDER/Z/TES.py", line 5, in <module>
    from .. import ESE
ImportError: attempted relative import with no known parent package

当前目录结构:

/FOLDER
├── ESE.py
└── Z
    └── TES.py

TES.py代码:

from .. import ESE
print("gut")

尝试其他导入方式均失败:

  • from FOLDER import ESE:报错ModuleNotFoundError: No module named 'FOLDER'
  • import FOLDER.ESE:报错ModuleNotFoundError: No module named 'FOLDER'
  • from ..FOLDER import ESE/from .FOLDER import ESE:报错ImportError: attempted relative import with no known parent package

可行解决方案

1. 以模块形式运行脚本

回到FOLDER的上级目录(即/Users/apzuba/Documents/Programowanie/),执行以下命令:

python -m FOLDER.Z.TES

这种方式会将FOLDER识别为Python包,相对导入逻辑就能正常生效。

2. 手动添加模块搜索路径

修改TES.py,在开头加入代码将FOLDER目录加入sys.path:

import sys
from pathlib import Path

# 获取FOLDER目录的绝对路径
folder_dir = Path(__file__).parent.parent
sys.path.append(str(folder_dir))

import ESE
print("gut")

这样Python就能找到ESE.py模块,直接导入即可。

3. 将FOLDER转为正式Python包

在FOLDER目录下创建空的__init__.py文件,目录结构变为:

/FOLDER
├── __init__.py
├── ESE.py
└── Z
    └── TES.py

之后同样从FOLDER上级目录,用模块方式运行:

python -m FOLDER.Z.TES

问题根源

Python相对导入仅适用于被作为模块导入的文件。如果直接运行TES.py(如python TES.py),Python会将其视为顶层脚本,无法识别它的父包结构,因此触发相对导入错误。而绝对导入找不到FOLDER,是因为该目录不在Python默认的模块搜索路径sys.path中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:30:57