引入模块

在Python中,一个Module就是一个脚本文件。 文件的名称就是模块的名称,在其他脚本,或模块自身中,可以使用全局变量__name__ 来获取到。

当直接运行一个脚本时,__name__会被设置成 __main__,这也是我们常看到Python程序的主入口函数中的这些代码

if __name__ == '__main__':
    pass

这种方式,能让我们区分是被import导入的,还是被Python解释器直接运行的。

使用import关键字来导入module,导入后,以moduleName.definitionName 的方式来调用函数、变量、类名。

需要注意的是,以下划线_ 开头的变量、函数,不会被导入。

module导入过程中,会从头到尾的运行一遍,所以,脚本里面定义的表达式、语句都会被执行。

import语句的几种写法

# 可以直接 使用 模块中 函数、变量
from moduleName import fun1, fun2
from moduleName import *

# 给模块 起别名
import moduleName as mn
# 也可以给 导入的 变量、函数、类起别名
from moduleName import fun1 as fn

Python解释器搜索module的步骤: 1. 先搜索内置模块,可以使用sys.builtin_module_names 来查看 2. 搜索sys.path 变量给出的目录列表

sys.path 变量从以下位置被初始化: 1. 执行Python命令的当前目录,或是输入脚本的目录 2. PYTHONPATH系统环境变量配置的目录列表,和配置Shell的PATH环境变量类似 3. 安装的依赖库,一般对应site-package目录,由site模块处理

分别打印一下上面提到的两个变量

import sys

print(sys.builtin_module_names)
print(sys.path)

对于全局变量sys.path,可以像操作list一样的对其进行操作,如:

import sys
sys.path.apend('/usr/local/python')
sys.path.insert(0, '..')

可以结合dir() 内置函数来查看module的目录

在Python中,包是一种用“点式模块名”构造 Python 模块命名空间的方法,可以把包理解成一个module集。

构建包的方法,是在一个目录中添加__init__.py文件,Python就会将该目录看成一个包。

__init__.py里可以使用__all__变量声明导出哪些模块,以应对 from...import * 的模式

依然使用import语句,导入包

# 直接导入p1包里的m2模块的fun1函数,这种方式,当用fun1函数时,要用全面,即 p1.m2.fun1
import p1.m2.fun1
# 起别名,就可以直接使用 fn
import p1.m2.fun1 as fn

# 使用from...import语句
# 从p1包里直接导入m2模块,可以直接使用 m2.fun1函数
from p1 import m2
# 从p1包里的m2模块中导入 fun1,这样可以直接使用fun1
from p1.m2 import fun1

对于同级包、上级包的导入,支持两种方式

# 假如在p1.s1.m2模块中,使用p1.m2模块里的fun1函数
# 使用绝对 包名
from p1.m2 import fun1
# 使用相对路径
from .. import m2

使用相对路径时,注意__main__主文件入口的情况。

1 自带或第三方

安装相关模块后,直接 用 import导入即可

2 自定义模块

2.1 同级目录

直接 import 即可

2.2 子级目录

将子级目录做成 包,即,子级目录中加入 __init__.py 文件,其中,可以什么都不写,或者 导入目录中的全部模块

在父级目录中,可以直接使用 from、import 进行导入使用

2.3 父级目录

需要在 子级目录的模块中,添加

import sys
sys.path.insert(0, '..')

然后,导入父级目录的模块,即可使用

如果调用同级目录的相关文件,需要将同级目录作为包的形式。