python相对导入的怪异

python相对导入的怪异,python,import,Python,Import,我有一个文件: STARTDIR/module/submodule/config.py 我有另一个文件: STARDIR/utils/filesys/getAbsPath.py 为什么这一行在config.py中工作 from ..utils.filesys import getAbsPath 它似乎是。指的是模块,而不是STARTDIR。模块中根本没有utils。事实上 from .. import utils 屈服 ImportError: cannot import name ut

我有一个文件:

STARTDIR/module/submodule/config.py
我有另一个文件:

STARDIR/utils/filesys/getAbsPath.py
为什么这一行在
config.py
中工作

from ..utils.filesys import getAbsPath
它似乎是
指的是
模块
,而不是
STARTDIR
模块中根本没有
utils
。事实上

from .. import utils
屈服

ImportError: cannot import name utils
这应该起作用:

from ...utils.filesystem import getAbsPath
这是因为:

  • 来自。导入…
    imports from
    STARTDIR/module/submodule/
  • from。。导入…
    从导入
    STARTDIR/module/
  • 来自。。。导入…
    从导入
    STARTDIR/
这应该可以:

from ...utils.filesystem import getAbsPath
这是因为:

  • 来自。导入…
    imports from
    STARTDIR/module/submodule/
  • from。。导入…
    从导入
    STARTDIR/module/
  • 来自。。。导入…
    从导入
    STARTDIR/

您的python路径是什么?(import sys;print sys.path)您的python路径是什么?(import sys;print sys.path)不会,因为我正在
STARTDIR
中启动脚本(因此它将超出顶级模块导入错误)。但是我已经安排好了我的代码来完成这个任务。你说“既然我开始写脚本”是什么意思?因为STARTDIR不是Python模块?是的。我正在运行的脚本位于
STARTDIR/run.py
中。即使有
STARTDIR/\uuuu init\uuuu.py
STARTDIR
也不会是一个模块。啊,好的。在这种情况下,正如您可能已经发现的,您不能使用相对导入。同样,正如您可能已经了解到的,最简单的方法是将STARTDIR添加到PYTHONPATH,然后只导入utils…
。不会,因为我正在
STARTDIR
中启动脚本(因此这将超出顶级模块导入错误)。但是我已经安排好了我的代码来完成这个任务。你说“既然我开始写脚本”是什么意思?因为STARTDIR不是Python模块?是的。我正在运行的脚本位于
STARTDIR/run.py
中。即使有
STARTDIR/\uuuu init\uuuu.py
STARTDIR
也不会是一个模块。啊,好的。在这种情况下,正如您可能已经发现的,您不能使用相对导入。同样,正如您可能已经了解到的,最简单的方法是将STARTDIR添加到PYTHONPATH中,然后导入utils…。