【问题标题】:How to fix ModuleNotFoundError: No module named 'parts'如何修复 ModuleNotFoundError:没有名为“parts”的模块
【发布时间】:2020-12-28 21:45:09
【问题描述】:

我有以下文件结构:

mytests
   models
      parts
        __init__.py
        ...
      __init__.py
      model.py
   test.py

这是__init__.py的内容:

from parts import *
from models import My_transformer

if __name__=='__main__':
    # ...

这是model.py的内容:

from parts.attention import Pre_Net

class My_transformer(tf.keras.Model):
    def __init__(self,config,logger=None):
        super(My_transformer, self).__init__()
        ...

当我运行test.py 时,我收到以下错误:

/mytests/models/__init__.py in <module>()
----> 1 from parts import *
ModuleNotFoundError: No module named 'parts'

在这一行:

from models import My_transformer

如何解决此错误?我从 Jupyter Notebook 运行 test.py。

更新

我在parts 中有__init__.py,它看起来如下:

from attention import *

if __name__=='__main__':
    print('ok')

【问题讨论】:

  • parts 需要自己的 __init__.py。这就是 python 告诉部件是一个包的方式。
  • @MYousefi:是的,我在parts 里面有__init__.py。很抱歉没有提到它。请查看我的更新。

标签: python package python-import importerror


【解决方案1】:

你应该有这样的结构和导入:

mytests
   models
      parts
        __init__.py
        attention.py
      __init__.py
      model.py
   test.py

models/parts/__init__.py内容:

from .attention import Pre_Net
# or from .attention import *

models/parts/attention.py内容:

class Pre_Net:
    pass

models/__init__.py内容:

from .model import *

models/model.py内容:

from models.parts import Pre_Net

class My_transformer(tf.keras.Model):
    def __init__(self,config,logger=None):
        super(My_transformer, self).__init__()
        ...

test.py内容:

from models import My_transformer

【讨论】:

  • 谢谢,只是说model.py 位于models 内部,而不是models/parts。您能否相应地更新答案以适应此结构?
  • @Fluxy 我编辑了答案。我真的不知道你的 test.py 里面有什么,所以我假设你想在 test.py 模块中导入 My_transformer
  • 没关系。非常感谢!您的回答帮助解决了我的问题!
猜你喜欢
  • 2019-10-06
  • 2019-09-18
  • 2019-07-10
  • 2021-07-03
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多