如果放在模块中,则python无法导入名称

Python cannot import name if placed in module

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to do relative imports in Python?

我正在经历一些我觉得很随机的事情。

我有一个像这样的文件夹结构:

1
2
3
4
5
6
dir A
    __init__.py is empty
    a.py imports stuff and b.py
dir B
    __init__.py is empty
    b.py imports NOTHING

a.py引发错误(无法导入名称b)。这只在B是模块B的一部分时发生。如果将其移出目录,则不会发生导入错误。

任何帮助都将不胜感激。我一定忽略了什么。


你试过相对导入吗

1
from ..B import b

编辑:如果包B在哪里不重要,则不适用。

但你没有描述你到底在做什么。您可能知道或不知道,有几种导入表单:

1
2
3
4
5
6
7
import module
import package # imports package.__init__ under the name package
import package.module
from package import module
import package
from module import component
from package.module import component

就像你只写的那样

a.py imports stuff and b.py

我不知道到底发生了什么:如果你想

1
import b

这失败了,因为B住在B包中。所以你需要一个

1
2
from B import b
import B.b

您上面的评论提到了名称冲突。在两个同样命名的包和模块中,哪一个具有优先级取决于您所处的目录:'.'通常位于sys.path的最开头,因此,如果您直接位于utils目录下,您可能会有与其他目录不同的体验。