Python ImportError: cannot import name XXXX
Python ImportError: cannot import name XXXX
我是 python 的新手(刚开始阅读学习 Python 艰难之路...)并且不明白为什么我会遇到这个臭名昭著的导入错误。我已经看到很多其他导入错误 posts 但其中 none 与我的相同(至少我没有找到相同的 post)。
我有一个名为 ex48 (D:\LearnPython\projects\ex48)
的项目目录,其中有一个 子文件夹 也称为 ex48 例如D:\LearnPython\projects\ex48\ex48
(这样命名目录是不好的做法吗?)。有一个 ex48.py
文件,其中定义了一个非常简单的 class,比如 class 称为 XXXX
。我有一个包含一些简单单元测试的 ex48_test.py
文件;在此测试文件中,如果我执行 from ex48.ex48 import XXXX
,那么当 ex48.py
文件位于子文件夹 (D:\LearnPython\projects\ex48\ex48
) 中时,一切正常。
现在我不明白的是,如果我将 ex48.py
放在主项目文件夹中,为什么它会给我一个 Import Error: cannot import name XXXX
,例如(D:\LearnPython\projects\ex48
) 并以 from ex48 import XXXX
.
的形式导入
顺便说一句,测试文件(ex48_test.py)在D:\LearnPython\projects\ex48\tests
中,我运行使用nose
包进行测试。
问题是您有一个同名文件夹 ex48
,其中有一个 __init__.py
,使其成为一个有效的 Python 包。
所以当你做 from ex48 import <something>
时,Python 正在导入 ex48
包,他们试图从中导入 <something>
,但是在包(__init__.py
的包),因此它给你 ImportError
.
我猜您的目录结构类似于 -
ex48/
ex48.py
ex48/
__init__.py
所以当您导入 ex48
时从主文件夹,它实际上最终导入了 ex48
包。您可以通过在 ex48_test.py
文件中执行以下操作来验证这一点 -
import ex48
print(ex48.__file__)
这应该是在您的 ex48
文件夹中导入 __init__.py
文件。
解决方案是重命名您的文件夹,使其与您的 ex48
模块不冲突。
我是 python 的新手(刚开始阅读学习 Python 艰难之路...)并且不明白为什么我会遇到这个臭名昭著的导入错误。我已经看到很多其他导入错误 posts 但其中 none 与我的相同(至少我没有找到相同的 post)。
我有一个名为 ex48 (D:\LearnPython\projects\ex48)
的项目目录,其中有一个 子文件夹 也称为 ex48 例如D:\LearnPython\projects\ex48\ex48
(这样命名目录是不好的做法吗?)。有一个 ex48.py
文件,其中定义了一个非常简单的 class,比如 class 称为 XXXX
。我有一个包含一些简单单元测试的 ex48_test.py
文件;在此测试文件中,如果我执行 from ex48.ex48 import XXXX
,那么当 ex48.py
文件位于子文件夹 (D:\LearnPython\projects\ex48\ex48
) 中时,一切正常。
现在我不明白的是,如果我将 ex48.py
放在主项目文件夹中,为什么它会给我一个 Import Error: cannot import name XXXX
,例如(D:\LearnPython\projects\ex48
) 并以 from ex48 import XXXX
.
顺便说一句,测试文件(ex48_test.py)在D:\LearnPython\projects\ex48\tests
中,我运行使用nose
包进行测试。
问题是您有一个同名文件夹 ex48
,其中有一个 __init__.py
,使其成为一个有效的 Python 包。
所以当你做 from ex48 import <something>
时,Python 正在导入 ex48
包,他们试图从中导入 <something>
,但是在包(__init__.py
的包),因此它给你 ImportError
.
我猜您的目录结构类似于 -
ex48/
ex48.py
ex48/
__init__.py
所以当您导入 ex48
时从主文件夹,它实际上最终导入了 ex48
包。您可以通过在 ex48_test.py
文件中执行以下操作来验证这一点 -
import ex48
print(ex48.__file__)
这应该是在您的 ex48
文件夹中导入 __init__.py
文件。
解决方案是重命名您的文件夹,使其与您的 ex48
模块不冲突。