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 模块不冲突。