Python ImportError:无法导入名称XXXX

时间:2015-09-24 17:16:24

标签: python python-import

我是python的新手(刚开始阅读学习Python的艰难之路......)并且无法理解为什么我得到这个相当臭名昭着的导入错误。我看过很多其他的导入错误帖子但是没有一个与我的相同(至少我没有找到相同的帖子)。

我有一个名为ex48 (D:\LearnPython\projects\ex48)的项目目录,里面有一个子文件夹,也称为ex48,例如D:\LearnPython\projects\ex48\ex48(这样做是不是这样命名目录?)。有一个ex48.py文件,其中定义了一个非常简单的类,比如名为XXXX的类。我有一个包含一些简单单元测试的ex48_test.py文件;在此测试文件中,如果我执行from ex48.ex48 import XXXX,那么当ex48.py文件位于子文件夹(D:\LearnPython\projects\ex48\ex48)中时,一切正常。

现在我不明白为什么如果我将Import Error: cannot import name XXXX放在主项目文件夹中,它会给我一个ex48.py,例如(D:\LearnPython\projects\ex48)并导入from ex48 import XXXX

顺便说一下,测试文件(ex48_test.py)在D:\LearnPython\projects\ex48\tests,我正在使用nose包运行测试。

1 个答案:

答案 0 :(得分:4)

isuse是你有一个同名的文件夹__init__.py,里面有一个from ex48 import <something>,使它成为一个有效的Python包。

因此,当您执行ex48时,Python正在导入<something>包,并且他们尝试从中导入__init__.py,但在包中找不到某些内容({{1 ()包,)因此它给你ImportError

我猜你的目录结构看起来像 -

ex48/
     ex48.py
     ex48/
          __init__.py

因此,在导入ex48时从主文件夹中,它实际上最终会导入ex48包。您可以通过在ex48_test.py文件中执行以下操作来验证这一点 -

import ex48
print(ex48.__file__)

这应该导入__init__.py文件夹中的ex48文件。

解决方案是重命名您的文件夹,使其与您的ex48模块不冲突。