zl程序教程

您现在的位置是:首页 >  其它

当前栏目

ImportError: attempted relative import with no known parent package

with No import package Parent ImportError Relative known
2023-09-27 14:19:49 时间

问题背景

最近开始尝试在终端训练模型时遇到了这个问题。原先的项目架构如下(这里为了方便举了个最简单的例子):

.
├── model
│   └── model1.py
├── process.py
└── train.py

1 directory, 3 files

其中 process.py 中的内容为

def get_data():
    return 0

model1.py 中的内容为

from ..process import get_data


def get_model():
    return get_data() + 1

train.py 中的内容为

from .process import get_data
from .model.model1 import get_model

print(get_data(), get_model())

随后在终端执行 python train.py > ./train.log 2>&1 时出现了如文章标题所提到的bug:

Traceback (most recent call last):
  File "/root/autodl-tmp/project/train.py", line 1, in <module>
    from .process import get_data
ImportError: attempted relative import with no known parent package

解决方案

去掉前面的 .,即:

model1.py 的内容改为

from process import get_data


def get_model():
    return get_data() + 1

train.py 中的内容为

from process import get_data
from model.model1 import get_model

print(get_data(), get_model())

就可以了。

注意,这样做虽然可以成功执行 python train.py,但是执行 python model/model1.py 依然会报错,此时采用 python -m model.model1