使用包会出现找不到模块的错误

working with packages gets a module not found error

我想重新构建我以前在一个目录中的 Python 应用程序,它运行良好。 现在我想移动包中的一些 Python 模块,但我在导入模块时遇到问题。

说,这是我的项目文件夹:

project
   |
   |- package
   |      |- __init__.py
   |      |- module1.py
   |      |- module2.py
   |- main.py

与 main.py:

from package.module1 import func1

func1()

module1.py:

from module2 import func2

def func1():
    func2()

module2.py:

def func2():
    pass

文件包/init.py为空

当我运行main.py时,我得到:

Traceback (most recent call last):
  File "c:\Users\wielando\Documents\Temp\pytest\main.py", line 1, in <module>     
    from packages.module1 import func1
  File "c:\Users\wielando\Documents\Temp\pytest\package\module1.py", line 1, in <module>
    from module2 import func2
ModuleNotFoundError: No module named 'func2'

为什么从 module1 中找不到 module2,尽管它在同一个文件夹中?

你可以看一下here绝对导入和相对导入的解释。

无论如何,您可以使用 relative import:

module1.py

from .module2 import func2

(使用module2前面的点告诉程序在同一文件夹中查找module2)。

或者,您可以使用 absolute 导入,即提供您从项目根目录导入的文件的完整路径文件夹。
在您的情况下,它将是:

module1.py

from my_packgs.module2 import func2

如果您使用 IDE,例如 PyCharm,您会注意到在绝对导入的情况下,指令被标记为错误。
这是因为 IDE 不知道您在 module1.py 中提供的绝对路径正在使用 main.py 所在的文件夹作为起点(因为您正在执行 main.py,main.py所在路径为项目根文件夹)。无论如何,当你 运行 main.py 时,一切正常。