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

Python中如何通过相对路径从祖父母文件夹导入模块?

解决从current.py导入grandparent.py的问题

嘿,先把你的目录结构再理一遍,方便咱们说清楚:

project/
├── grandparent.py
├── folder1/
│   ├── parent.py
│   └── folder2/
│       ├── sibling.py
│       └── current.py

你已经搞定了同级sibling.py和上一级parent.py的相对导入,现在要拿最顶层的grandparent.py,其实问题出在两个地方:

1. 正确的相对导入语句

从current.py所在的folder2往上数,两级才能到project目录(folder2 → folder1 → project),所以对应的相对导入代码应该是:

from ...grandparent import *

你之前试的...grandparent其实是对的,但大概率是运行方式不对导致报错——这可是Python相对导入的经典坑!

2. 别直接运行current.py,要以包的方式启动

Python的相对导入是基于模块所在的包层级的,如果你直接用python current.py或者双击运行这个文件,Python会把folder2当成顶层模块目录,这时候...这种三级相对导入就会“跳过头”,触发ValueError: attempted relative import beyond top-level package错误。

正确的操作是:

  • 先切换到project目录的上级文件夹(比如你的project在/Users/xxx/下面,就进到/Users/xxx/)
  • 用-m参数以模块方式启动:
python -m project.folder1.folder2.current

这样Python就会把project当作顶层包,相对导入的层级关系就完全正确了。

小提醒:给目录加个__init__.py

虽然Python 3.3+允许没有__init__.py的命名空间包,但为了兼容性(比如兼容旧版本Python)和明确性,建议在project/、folder1/、folder2/这三个目录下都新建一个空的__init__.py文件,告诉Python这些是合法的包目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:32:28