有一些重要的误解需要解决,特别是用术语。首先,通常,当您认为要package在python中导入时,实际上要导入的是module。package在考虑有助于您组织代码的文件系统子结构时,应使用该术语。但从代码角度来看,每当导入时package,Python会将其视为模块。所有软件包都是模块。并非所有模块都是软件包。具有该__path__属性的模块被视为包。
您可以检查这os是一个模块。要确认这一点,您可以执行以下操作:
import os
print(type(os))
在您的示例中,当您执行时import FooPackage,FooPackage也会被视为模块,并且其属性(函数,类等)也应该在中定义__init__.py。由于您__init__.py为空,因此找不到foo。
在import语句之外,您不能使用'.'符号来寻址模块内部的模块。如果将amodule导入到预期的父级的包__init__.py文件中,则会发生唯一的异常。为了清楚起见,让我们在这里做一些例子:
考虑您的原始结构:
FooPackage/
__init__.py
foo.py
情况1:__init__.py是一个空文件
import FooPackage
FooPackage.foo
import FooPackage.foo
foo.anything
FooPackage.foo.anything
情况2:__init__.py中有一行import foo:
import FooPackage
FooPackage.foo
现在,假设foo不再是您在中定义的a module,而是a 。如果这样做,将抛出错误,指出不是模块。function__init__.pyimport FooPackage.foofoo