- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有以下模块:
.
└── my_module
├── __init__.py
├── my_module_A.py (defines ClassA)
└── my_module_B.py (defines ClassB, which needs ClassA)
文件如下:
# __init__.py
from .my_module_A import ClassA
from .my_module_B import ClassB
# my_module_A.py
from my_module import ClassB
class ClassA:
def __init__(self, class_b: ClassB):
pass
# my_module_B.py
class ClassB:
def __init__(self):
pass
重要的是 ClassB
需要一个 ClassA
的实例实例化。
导入模块my_module
引发ImportError
:
>>> # Working directory is the parent of my_module
>>> import my_module
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "foo/Module/my_module/__init__.py", line 3, in <module>
from .my_module_A import ClassA
File "foo/Module/my_module/my_module_A.py", line 3, in <module>
from my_module import ClassB
ImportError: cannot import name 'ClassB' from partially initialized module 'my_module' (most likely due to a circular import) (foo/Module/my_module/__init__.py)
问题似乎出在下面。当导入 my_module
时,Python 去通过它的 __init__.py
并开始从 my_module_A
导入 ClassA
。此文件从 my_module_B
导入自身 ClassB
因此导入了此类对于 my_module
也是如此。在 my_module_A
之后,Python 尝试导入 ClassB
来自 my_module
;但是它已经被 my_module_A
导入了,所以 Python引发 ImportError
。
Python 提示错误可能来自循环导入,但这不是这里的情况。我真的认为问题在于类 ClassB
是导入两次:如果我不在 __init__.py
中导入 my_module_B
并使用my_module_A
中的my_module_B
相对导入,导入成功并且没有出现异常。
一个可能的解决方案是在 python 文件中只使用相对导入我的模块
。问题是 my_module
中的一些子模块需要他们自己有很多来自 my_module
的类(其中一些大约有 20 个)并且它对于必须知道精确文件名的维护者来说是丑陋和不便的定义类的地方。所以我的问题是:如何在 my_module
子模块中继续使用 from my_modyle import …
导入?非常感谢。
附言你们中的一些人可能会建议重新考虑我的模块组织。我想到了那但是没有规范的方法可以做到这一点而且这个平面结构确实是更容易,更清晰。因此,如果可能的话,我想避免这种情况。
Python 版本:3.9.1
最佳答案
问题的根源是当 my_module_A 时
正在导入(错误消息中的“部分初始化”位暗示了这一点)。您需要在 ClassB
还没有被加载到 my_module
(在 __init__.py
中) __init__.py
中手动对导入进行排序,以便依赖项出现在使用它们的模块之前:
# __init__.py
from .my_module_B import ClassB
from .my_module_A import ClassA # uses ClassB
一个更可靠的解决方案是跳过 __init__.py
并直接从 my_module_B
导入,但是正如您所说,这对于很多模块来说会变得笨拙。
# my_module_A.py
# relative imports also work here
from my_module.my_module_B import ClassB
class ClassA:
def __init__(self, class_b: ClassB):
pass
关于python-3.x - 避免部分初始化的模块 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65900435/
如何根据可用性使用有时像这样导入的不同模块运行相同的测试: try: from gevent.local import local except ImportError
我在使用 Nose 运行我的单元测试时遇到了一个ImportError,而当我单独运行它时却没有。此处提及的所有文件均可在 http://gist.github.com/395541# 中查看. 如果
当我在一个Python程序中导入熊猫时,我收到以下错误。这里也是程序:
我想下载Spacy,但终端的打字扩展版本降低了:。接下来,我想安装语言包python-m spacy Download en,但出现另一个错误:。我当前的python版本是3.7,我应该更新它吗?或者
我想下载Spacy,但终端的打字扩展版本降低了:。接下来,我想安装语言包python-m spacy Download en,但出现另一个错误:。我当前的python版本是3.7,我应该更新它吗?或者
Traceback (most recent call last): File "c:\users\sathish.pv\appdata\local\continuum\anaconda3\lib
我已经编写了一个名为coinview.py的脚本,它可以在Linux上运行。当我尝试以SYSTEM D身份运行它时,出现错误。错误:ImportError:没有名为‘Schedule’的模块。。我用的
这是我的错误信息 Traceback (most recent call last): File "app.py", line 9, in from forms import Conta
我正在使用 Mac OS x 10.10.3 Yosemite 和 Python 2.7.9 |Anaconda 2.2.0 (x86_64) 来处理很多 python 的东西。我正在使用 Eclip
我是 Django 新手,正在创建我的第一个项目。一切正常,突然出现 ImportError('win32 only') ImportError: win32.在网上搜索了很多,但没有找到解决方案。
回复 a similar question建议我不能以独立模式导入 Shell 的东西。但是,据我了解,St 是一个用 C 编写的单独库。但我仍然无法在 gjs 中导入它...... IE。 $ gj
好吧,我被这个难住了。我环顾四周,但找不到任何东西,也不知道如何调试它。基本上,python 在我未导入任何内容的代码行中抛出一个 ImportError。我有一个相当大的模块 ICgen,其中包含模
我正在调用 psycopg2 import psycopg2 我得到标准错误 ImportError: No module named psycopg2 我用 macports 安装了我的副本,所以我
我已经使用 brew 安装了 opencv3,但是在执行 import cv2 时遇到了 importError >>> import cv2 Traceback (most recent call
安装numpy表示已经是最新版本,出现在pip list返回的列表中也是,但是导入它会产生导入错误(并且这个问题对于每个其他已安装的模块都存在,例如 scipy、matplotlib)。 系统有什么问
我有一个 python 脚本,运行时会产生以下错误: import urllib2 File "C:\Python27\lib\urllib2.py", line 94, in import htt
我正在尝试运行 this tutorial在合作实验室。 但是,当我尝试导入一堆模块时: import io import torch from torchtext.utils import down
我在这里遇到了一个特别棘手的问题。 我目前正在做一个个人项目,从一个相对简单的 Riot API 包装器开始,一切都运行良好,直到我想打包它并组织模块。这是该项目的链接:Logistic Analys
我已经通过easy_install.py --upgrade google-api-python-client安装了适用于Python的Google API客户端库。当我运行包含from oauth2
我正在使用 Django,并且我的组应用程序不断收到此错误,我检查了所有导入设置,一切都很好。我的注册和个人资料应用程序运行顺利,但为什么这个应用程序给我一个 ImportError 模型? Trac
我是一名优秀的程序员,十分优秀!