【问题标题】:ValueError: Attempted relative import in non-package [duplicate]ValueError:尝试在非包中进行相对导入[重复]
【发布时间】: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 我直接运行它。

标签: python python-2.7


【解决方案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 是一个模块。我的链接答案是这不起作用的真正原因。
    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2020-07-20
    • 1970-01-01
    • 2019-10-16
    • 2014-02-28
    • 2016-09-08
    • 2019-05-25
    • 2014-01-02
    相关资源
    最近更新 更多