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,如何修复“尝试在非包中进行相对导入”
训练 yolov3 时出错:- ValueError: tf.function-decorated 函数试图在非第一次调用时创建变量