Python导入错误:无法导入名称XXXX

Python导入错误:无法导入名称XXXX,python,python-import,Python,Python Import,我对python非常陌生(刚开始阅读《艰苦地学习python》……),不明白为什么会出现这个臭名昭著的导入错误。我看到过很多其他的导入错误帖子,但是没有一个和我的一样(至少我没有找到相同的帖子) 我有一个名为ex48的项目目录(D:\LearnPython\projects\ex48),其中有一个子文件夹也称为ex48,例如D:\LearnPython\projects\ex48\ex48(这样命名目录是不好的做法吗?)。有一个ex48.py文件,其中定义了一个非常简单的类,比如称为XXXX。我

我对python非常陌生(刚开始阅读《艰苦地学习python》……),不明白为什么会出现这个臭名昭著的导入错误。我看到过很多其他的导入错误帖子,但是没有一个和我的一样(至少我没有找到相同的帖子)

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

现在我不明白的是,如果我将
ex48.py
放在主项目文件夹中,例如(
D:\LearnPython\projects\ex48
)并作为
从ex48 Import XXXX导入,为什么会给我一个
导入错误:无法导入名称XXXX


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

问题是,您有一个同名的文件夹
ex48
,其中包含
\uu init\uuuuuuuuuuu.py
,使之成为一个有效的Python包

因此,当您从ex48导入
时,Python正在导入
ex48
包,他们试图从中导入
,但在包中找不到某些内容(
\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
),因此它将为您提供
importorror

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

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

import ex48
print(ex48.__file__)
这应该是在您的
ex48
文件夹中导入
\uuuu init\uuuuuuu.py
文件


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

您的子文件夹是否有
\uuuuu init\uuuuuuuuuuuuy.py
?LPTHW不是新学员的好资源imho…@AnandSKumar是的。这就是原因吗?@JoranBeasley我快写完这本书了,尽管我没有按照作者的要求做所有的事情:)你说得绝对正确!我将进一步了解Python包是如何工作的,这是我无法理解此错误的主要原因。非常感谢。