为什么从文件夹中导入文件有效,但从导入的文件夹中调用文件却不行?

Why does importing a file from a folder work, but calling a file from an imported folder doesn't?

我目前正在处理一个项目,主文件位于一个目录中,子目录中包含一些附加文件:

project
|- folder
|  |- __init__.py
|  |- file1.py
|  |- file2.py
|  |- file3.py
|- main.py

初始化文件为空。

就我而言,我想使用 尽可能少的代码 将所有文件导入我当前的 main.py。重点是:

有效

from folder.file1 import somefunction1
from folder.file2 import somefunction2

somefunction1()
somefunction2()

有效

from folder import file1
from folder import file2

file1.somefunction1()
file2.somefunction2()

不起作用

import folder
folder.file1.somefunction1()
folder.file2.somefunction2()

AttributeError: module 'folder' has no attribute 'file1'

我明白错误消息的意思,但不知道它出现的真正原因。在我的第一个例子中,我可以调用 folder.file 和 folder.file2 作为属性,但在我的最后一个例子中我不能?

不幸的是,我只发现了类似的问题,询问一般情况下如何从文件夹导入文件,但没有关于这个具体问题的信息。

Python 到底在后台做什么,有什么办法可以解决我的问题吗?

您需要添加

from . import file1

在你的 _init_.py 这会将 file1 放入文件夹中,然后您可以从 main.py

访问该文件夹

在您的 init.py 文件中

__all__ = ["file1","file2","file3"]

在main.py

from folder import *

file1.somefunction1()

file2.somefunction2()