ValueError:尝试在非包中进行相对导入[重复]

Posted

技术标签:

【中文标题】ValueError:尝试在非包中进行相对导入[重复]【英文标题】:ValueError: Attempted relative import in non-package [duplicate] 【发布时间】:2015-12-08 08:44:11 【问题描述】:

我有两个 Python 文件,一个存储在位置 /Python/plata.py,另一个存储在位置 /Python/tao/mock.py。这就是我的plata.py 文件的样子::

def printSomething():
    print 'This is a test.'

我正在尝试在我的mock.py 文件中导入printSomething() 函数,如下所示:

from . import plata

plata.printSomething()

但是,这是我遇到的错误:

Traceback (most recent call last):
File "/home/manas/Python/tao/mock.py", line 1, in <module>
from . import plata
ValueError: Attempted relative import in non-package

我也将__init__.py 文件包含在位置/Python/__init__.py/Python/tao/__init__.py 中。但是,我仍然遇到同样的错误。

这里似乎有什么问题?

【问题讨论】:

您是否直接运行mock.py(而不是从其他地方导入)? @BrenBarn 我直接运行它。 【参考方案1】:

出于明显的安全原因,包的父目录包含在sys.path 中。但是,无论如何...

import sys
sys.path.append('..')

import plata

希望对您有所帮助!

【讨论】:

【参考方案2】:

请参阅What's the difference between a Python module and a Python package? 了解模块与包的说明。简而言之,您的 Python 目录不是一个包。 plata.py 是一个独立的模块,应该作为import plata 导入。

【讨论】:

这是重复的链接原因仍然没有向 OP 解释为什么添加随机 __init__.py 文件不是答案。 tao 是一个包,plata 是一个模块。我的链接答案是这不起作用的真正原因。

以上是关于ValueError:尝试在非包中进行相对导入[重复]的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 __init__.py,如何修复“尝试在非包中进行相对导入”

尝试在当前结构中的非包错误中进行相对导入

ValueError:尝试相对导入超出***包

训练 yolov3 时出错:- ValueError: tf.function-decorated 函数试图在非第一次调用时创建变量

导入 keras 时出现 ValueError «您正在尝试使用旧的 GPU 后端»

NERDA 模型导入的 ValueError