如何从同一个子包中导入另一个模块中的模块?

How to import a module in another module from the same subpackage?

我的包树如下:-

My_package
    |
    +--__init__.py    (empty)
    +--mainfile.py
    +--main_modules
        |
        +--__init__.py    (empty)
        +--module1.py
        +--module2.py

模块2的内容:-

class Wish:
    def greatings(self):
        print("Hello World!")

wish = Wish()

当我尝试从模块 1 中的模块 2 导入愿望时:- 模块1的内容:-

from module2 import wish

没有错误。

但是当我在 mainfile.py 中导入两个模块时, mainfile.py的内容:-

from main_modules import module1
from main_modules import module2

发生错误:-

Traceback (most recent call last):
  File "c:\Users\amuly\AppData\Local\Programs\Python\PyProgs\Test package\main package\mainfile.py", line 1, in <module>
    from main_modules import module1
  File "c:\Users\amuly\AppData\Local\Programs\Python\PyProgs\Test package\main package\main_modules\module1.py", line 1, in <module>       
    from module2 import wish
ModuleNotFoundError: No module named 'module2'

这是问题的截图:- Screen Shot

我已经搜索了各种相关问题并尽了最大努力,但还是不行

由于 module1module2 处于同一包级别,您可以在 module1.py:

中简单地执行此操作

from module2 import wish

要从 mainfile.py 导入 module2.wish,您可以这样做:

from main_modules.module2 import wish

编辑 - 在 module1.py 中,将导入语句更改为:

from main_modules.m2 import wish

使用 main_modules.m2 会有所帮助,因为函数调用是从 mainfile.py 发生的。因此,随后调用的文件中的导入语句将查看相对于 mainfile.py 的导入。我希望这是有道理的。

您必须删除 from .module2 import wish 中的 .,因为它们处于同一包级别(正如@Sindhu Satish 已经指出的那样)。

在您的 module1.py 文件中,您必须将导入语句更改为:from module2 import wish 才能正常工作。

希望能帮到你!