ImportError:无法导入名称 - 在一个地方工作但在另一个地方不工作

时间:2014-11-07 21:15:24

标签: python python-import

所以我有这个目录结构:

proj/
|
---/subDirA
   |
   ---__init__.py
   ---fileA.py
|
---/subDirB
   |
   ---__init__.py
   ---fileB.py
|
---start.py

所以我要做的是从fileB.py导入FileA.py中的一个函数。所以我尝试了这个:

from subDirA.fileA import funct

当我这样做时,我收到以下错误:

ImportError: cannot import name funct

但如果我这样做:

from subDirA.fileA import *

我没有收到错误..有人可以解释为什么我会收到此错误?

注意

文件FileA.py只有两个函数,第一个函数我在使用subDirA.fileA import funct运行start.py时导入它。我在运行start.py时遇到错误,在fileB.py中我尝试使用subDirA.fileA import funct2导入第二个函数

1 个答案:

答案 0 :(得分:1)

导入时funct模块对象上没有fileA。虽然循环导入是导致此问题的最常见原因,但也可能是拼写错误或其他一些问题。

如果您整体导入模块并将funct称为fileA.funct,则问题可能会消失,因为fileA.funct只需要在运行时提供,而不是进口时间。

您可能还会在导入后立即尝试执行print(dir(fileA)),以查看此时的内容。您也可以在print()中定义funct之后立即放置fileA.py,以查看定义是否在您收到此错误之前执行:

def funct(args):
    do_stuff()
print('funct() declared!')

如果您尝试单独执行fileB.py,则不会期望这些导入能够正常工作,因为工作目录不是proj。工作目录必须为proj才能正确解析这些导入。但是,这显然不是问题,或者你无法进行明星导入。