00.除了模块名之外,导入也可以指定目录路径。Python代码的目录就是包。
01.选择点号语法、一部分是考虑到跨平台,但也是应为import语句中的路径编程实际的嵌套的对象路径。这种语法也意味着,如果你忘了import语句中省略.py,就会得到奇怪的错误信息。
02.
03.from * 语句的行为:作为一个高级功能,你可以在__init__.py文件内使用__all__列表来定义目录以from*语句形式导入时,需要导出什么。在__init__.py文件中,__all__列表时指当包(目录)名称使用from*的时候,应该导入的字模块的名称清单。
04.__init__.py包文件:包导入语句的路径中的每个目录内都必须有__init__.py这个文件,否则导入包会失败。
05.包让导入更具信息性,并可以作为组织工具,简化模块的搜索路径,而且可以解决模糊性。
06.决定自己的系统中使用每一个utilities.py文件内的一些程序代码。
07.
08.他们需要位于统一包中的模块,而不是位于模块导入搜索路径上某处的模块(绝对导入)
09.from .spam import name:意味着"从名为spam的模块导入变量name,而这个spam模块域包含这条语句的文件位于同一个包下"
10.
11.模块查找规则总结:
*简单模块名通过搜索sys.path路径列表上的每个目录来查找,从左到右进行。
*包时带有一个特殊的__init__.py文件的Python模块的直接目录,这使得一个导入中可以使用A.B.C目录路径语法。
*在一个包文件中,常规的import语句使用和其他地方的导入一样的sys.path搜索规则。
12.相对导入语法实际上时一种绑定声明,而不是一种偏好,注意到这点很重要。