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

Python从父目录导入模块失败,求有效解决方法

问题原因

你遇到的ImportError: attempted relative import with no known parent package,核心原因是直接运行test.py时,Python会把它当作独立的顶层脚本,而非root_package包的一部分,此时相对导入依赖的模块__package__属性不存在,导致相对导入失效。

解决方案(不一定非要改sys.path)

方法1:正确相对导入+以包模块方式运行

  1. 修正test.py里的导入语句:
    from .. import common
    
    (test是root_package的子包,..代表上层的root_package目录,导入时不需要加.py后缀)
  2. 切换到root_package的上级目录(即包含root_package的文件夹),执行命令:
    python -m root_package.test.test
    
    用-m参数让Python把root_package当作包加载,此时相对导入就能正常工作。

方法2:绝对导入(无需修改代码里的sys.path)

把root_package的上级目录添加到Python搜索路径:

  • 临时方式:运行test.py前设置环境变量(Windows用set,Linux/macOS用export):
    # Linux/macOS
    export PYTHONPATH=/path/to/root_package_parent_dir:$PYTHONPATH
    # Windows
    set PYTHONPATH=C:\path\to\root_package_parent_dir;%PYTHONPATH%
    
  • 永久方式:将该路径添加到Python的site-packages目录下的.pth文件中。
    之后test.py里直接用绝对导入:
from root_package import common

无论直接运行test.py还是用-m方式,都能正常导入。

方法3:修改sys.path(备选,不推荐)

如果一定要直接运行test.py,可以在脚本开头手动把项目根目录加入搜索路径:

import sys
from pathlib import Path
# 获取root_package目录的路径(当前test.py的父目录的父目录)
sys.path.append(str(Path(__file__).parent.parent))
from root_package import common

这种方法虽能解决问题,但会让代码和项目结构耦合,迁移或调整结构时容易出错,不推荐作为长期方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 07:33:28