我正在尝试使用以下目录结构来遵循PEP 328 :
pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py在core_test.py我有以下导入语句
from ..components.core import GameLoopEvents但是,当我运行时,出现以下错误:
tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package到处搜索时,我发现 “ 即使使用__init__.py,相对路径也不起作用 ” 和 “ 从相对路径导入模块 ”,但它们没有帮助。
我在这里想念什么吗?
详细说明伊格纳西奥 · 巴斯克斯(Ignacio Vazquez-Abrams)的答案:
 Python 导入机制相对于当前文件的__name__ 。当您直接执行文件时,它没有通常的名称,而是使用"__main__"作为其名称。因此,相对进口无效。 
您可以按照 Igancio 的建议使用-m选项执行它。如果包的一部分要作为脚本运行,则还可以使用__package__属性来告诉该文件在包层次结构中应具有的名称。 
有关详细信息,请参见http://www.python.org/dev/peps/pep-0366/ 。
是。您没有将其用作包装。
python -m pkg.tests.core_test如果将当前目录追加到sys.path则可以直接使用import components.core : 
if __name__ == '__main__' and __package__ is None:
    from os import sys, path
    sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))