python 包导入简介

前言

  本文介绍了python中的包结构和导入的相对路径等包的基础问题.

1.包导入

    python代码的目录就成为包,因此,这类导入就成为包导入。事实上,包导入是把计算机上的目录变成另一个python命名空间,而属性则对应于目录中所包含的子目录和模块文件。

  python代码的目录就成为包,因此,这类导入就成为包导入。事实上,包导入是把计算机上的目录变成另一个python命名空间,而属性则对应于目录中所包含的子目录和模块文件。

2.包导入基础

  在import语句中列举简单文件名的地方,可以改成列出路径的名称,彼此以点号相隔。

import dir1.dir2.mode

  这些语句中的“点号”路径是对应于机器上目录层次的路径,通过这个路径可以找到mode.py文件。

3. __ init__.py包文件

  使用包导入时,必须遵照一条约束:包导入语句的路径中的每个目录内都必须有__init__.py文件,否则包导入失败。即import dir1.dir2.mode必须遵守下列规则:

  • dir1dir2中都必须有一个__init__.py文件
  • dir0是容器,不需要__init__.py 文件,如果有的话,也会被忽略
  • dir0必须在模块搜索路径上。

即包的结构如下所示

dir0\
    dir1\
        __init__.py
        dir2\
            __init__.py
            mode.py

4.__init__.py文件作用

  __init__.py文件的作用有三个:包初始化,替目录产生模块命名空间以及使用目录导入时实现from *

 4.1包的初始化

  python首次导入某个目录时,会自动执行该目录下的__init__.py文件中的所有程序代码,因此这类文件自然就是放置包内文件所需要初始化的代码的地方。例如,可以用来初始化文件,创建需要的数据文件,链接数据库等。一般来说,单独直接执行__init__.py文件没有什么用,当包首次读取时,就会直接运行

 4.2模块命名空间初始化

  在包的导入模型中,脚本的目录路径,在导入后会变成真实的嵌套路径对象。

 4.3from *语句的行为

  在__init__.py文件中,__all__列表指当包(目录)名称使用from *的时候,应该导入的子模块的名单清单。如果没有指定__all__from *语句不会加载嵌套于该目录的子模块。取而代之的是,只加载该目录的__init__.py文件中赋值语句定义的变量,包括该文件中程序代码明确导入的任何子模块。

5.包相对导入

  假设有这样一个包dir0,其子模块的结构如下所示:

dir0\
    dir1\
    mode1.py
        dir2\
        mode2.py
            dir3\
            mode3.py

 当前处于mode2.py文件中。则有下面的操作:

  • from .dir3 import mode3

  表示从当前执行目录(当前目录,即dir2)的子目录(即dir13)中搜索,mode3 模块 。

  .代表`dir0\dir1\dir2“`

  • from . import mode2.mode3

  表示从执行程序的目录(当前目录,即dir2)搜索当前目录,即mode2 mode3 模块

  .代表dir0\dir1\dir2

  • from .. import mode1 mode2

​ 表示从当前执行目录(当前目录,即dir2)的父目录(即dir1)中搜索,mode1 mode2模块

  ..代表dir0\dir1\

猜你喜欢

转载自blog.csdn.net/weixin_41500849/article/details/80298353