所以我有这个目录结构:
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导入第二个函数
答案 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
才能正确解析这些导入。但是,这显然不是问题,或者你无法进行明星导入。