[gongel] ImportError: attempted relative import with no known parent package

  • 目录结构
parent/
├── parent.py
└── son
    └── son.py
  • parent.py
value = 'parent'
  • son.py
from .. import parent

print('count = {}'.format(parent.value))
一. 问题复现

这时候运行son.py时会出现“ImportError: attempted relative import with no known parent package”

二. 解决办法

1.【最简洁】增加上层路径到sys.path中,修改son.py的内容为

import os
import sys

# Add parent.py to system path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)))

import parent

print('count = {}'.format(parent.value))

2. 增加上级目录,同时将下级的文件夹设置为package,修改后的目录结构为

grandfather/
├── grandfather.py
└── parent
    ├── __init__.py     # 里面为空
    ├── parent.py       # 内容保持不变
    └── son
        ├── __init__.py # 里面为空
        └── son.py      # 内容保持不变

grandfather.py

import parent.son.son

3. 【类似于2,不用grandfather.py】增加上级目录,同时将下级的文件夹设置为package,修改后的目录结构为

grandfather/
└── parent
    ├── __init__.py
    ├── parent.py
    └── son
        ├── __init__.py
        └── son.py

在grandfather目录下,通过以下命令调用:

python -m parent.son.son

Ref:https://napuzba.com/a/import-error-relative-no-parent

4+