如何解决ModuleNotFoundError?

时间:2020-01-31 07:17:02

标签: python package python-import python-module

我想在 main.py 中导入 abc.py ,而 abc.py 本身会导入 xyz.py pqr.py 。 以下是我的项目结构:

main_folder
    |
    +--main.py
    |
    +--inside_folder
        |
        +--sub_folder
            |
            +--abc.py
            |
            +--xyz.py
            |
            +--subsub_folder
                |
                +--pqr.py

为此: 我在 main.py 中写了以下几行: from inside_folder.sub_folder import abc 并且abc.py包含

from inside_folder.sub_folder.subsub_folder import pqr 
from inside_folder.sub_Folder import xyz

我还尝试从 abc.py 文件中导入没有inside_folder.sub_folder部分,但是这样做会报告ModuleNotFoundError

请帮助我解决此问题。

注意: 我已将 init .py 添加到所有文件夹。错误仍然无法解决。

2 个答案:

答案 0 :(得分:1)

  • 您的程序包(充当单个python名称空间的文件夹)应该有一个__init__.py文件,以将它们声明为程序包,尽管IIRC it's not quite necessary anymore in some cases更容易做到
  • from inside_folder.sub_folder import abc是完全错误的,在PEP 328之后,这告诉Python寻找顶级inside_folder。您需要在此处使用相对导入,以便Python在导入文件(即from .inside_folder.sub_folder
  • 中查找兄弟
  • 尽管假设您完全不在树上,而是向我们展示并进行from main_folder import main.py或运行python -mmain_package.main,但PYTHONPATH的设置将与其他情况不同
  • 您显示的结构与您的导入不匹配,abc.pysub_folder的下一个,而不是

答案 1 :(得分:1)

如果您使用的是python2,并且每个文件夹都包含带有以下代码的__init__.py文件,则上述文件夹结构不会有任何问题 main.py

from inside_folder.sub_folder import abc

abc.py

from subsub_folder import pqr 
import xyz

但是如果您使用的是python 3,则需要将abc.py更改为

from .subsub_folder import pqr 
from . import xyz