导入完整软件包或子软件包而不是软件包内部的模块是什么意思?

时间:2019-06-23 13:54:22

标签: python module package

我正在完善我的原始问题(因此我编辑了帖子):

我们假设我们有一个名为“ PackageA”的软件包。在该程序包中,我们有一个名为“ SubPackageA”的子程序包。在该子包中,我们有一个名为“ ModuleA”的模块,该模块包含一个名为“ functionA”的函数。

我知道要调用此函数,我必须执行以下导入:

import PackageA.SubPackageA.ModuleA

然后,我可以通过编写以下内容来调用该函数:

PackageA.SubPackageA.ModuleA.functionA()

我也知道我可以做到:

from PackageA.SubPackageA.ModuleA import functionA

然后我可以通过以下方式调用该函数:

ModuleA.functionA()

我不清楚的是:可以通过编写以下内容导入包和/或子包:

import PackageA

import PackageA.SubPackageA

但是这样做有什么好处?毕竟,要能够调用“ functionA”,我必须专门导入模块,因此导入完整的程序包和/或可以得到什么?完整的子软件包?

谢谢, 塔尔。

1 个答案:

答案 0 :(得分:0)

我正在尝试通过进一步的研究来回答自己的问题。让我们忽略该子软件包以使其变得更容易。

让我们假设我有“ PackageA”,并且在此软件包中,我有一个名为“ ModuleA”的模块,其中包含一个名为“ functionA”的功能。

我可以在我的主文件中编写“ import PackageA.ModuleA”,而不是在PackageA dunder初始化文件中编写:“从PackageA import ModuleA”,然后在我的主文件中编写:导入PackageA”,仍然可以调用该函数(通过编写PackageA.ModuleA.functionA()”。

如果您的包中有一个模块,这没有任何意义,但是使用包的整个想法是将彼此相关的多个模块组合在一起,以及从包的dunder中导入所有模块初始化文件,然后在您的代码(主文件)中,您可以从所有模块访问所有功能,只需导入包即可,而不必分别导入每个模块。

我是对的吗?