- 1. 模块的导入
- 1.1 import 语句导入
- 1.2 from…import 导入
- 1.3 import()动态导入
- 1.4 模块的加载问题
- 2. 包 package 的使用
- 2.1 包(package)的概念和结构
- 2.2 导入包操作和本质
- 2.3 包内引用
- 2.4 sys.path 和模块搜索路径
import 语句的基本语法格式如下: import 模块名 #导入一个模块 import 模块1, 模块2... #导入多个模块 import 模块名 as 模块别名 #导入模块并使用新名字
- import 加载的模块分为四个通用类别
- 使用 python 编写的代码(.py 文件);
- 已被编译为共享库或 DLL 的 C 或 C++扩展;
- 包好一组模块的包;
- 使用 C 编写并链接到 python 解释器的内置模块;
from 模块名 import 成员1,成员2,... from 模块名 import * # 导入一个模块中的所有成员
- 尽量避免使用“from 模块名 import * ”,它会将模块中所有不是以下划线( _ )开头的名字都导入到当前位置;
- import 导入的是模块;
- from…import 导入的是模块中的一个函数/一个类;
- import 语句本质上就是调用内置函数__import__();
- 给__import__()动态传递不同的的参数值,就能导入不同的模块;
s = "math" m = __import__(s) print(m.pi)
- 不建议自行使用__import__()导入,其行为在 python2 和 python3 中有差异,会导致意外错误;
- 如果需要动态导入可以使用 importlib 模块;
import importlib
a = importlib.import_module("math")
print(a.pi)
1.4 模块的加载问题
- 一个模块无论导入多少次,这个模块在整个解释器进程内有且仅有一个实例对象;
- 确实需要重新加载一个模块时,可以使用importlib.reload()方法;
import test import importlib importlib.reload(test)
2. 包 package 的使用 2.1 包(package)的概念和结构
- 将功能类似的模块放到一起,形成了“包”,本质上,“包”就是一个有__init__.py 的文件夹;
- 包下面可以包含模块(module),也可以再包含子包(subpackage);
若需要导入包内的module_AA.py,则:
import a.aa.module_AA #使用时,必须使用完整名称来;eg:a.aa.module_AA.fun_AA() from a.aa import module_AA #使用时,能够直接使用模块名;eg:module_AA.fun_AA() from a.aa.module_AA import fun_AA #使用时,能够直接使用函数名;eg:fun_AA()
- 导入包的本质其实是“导入了包的__init__.py”文件;
- 可以在__init__.py 中批量导入需要的模块;
- init.py 的三个核心作用:
- 作为包的标识,不能删除;
- 用来实现模糊导入;
- 导入包实质是执行__init__.py 文件,可以在__init__.py 文件中做这个包的初始化、以及需要统一执行代码、批量导入;
- 如果是子包内的引用,可以按相对位置引入子模块;
from .. import module_A #..表示上级目录 from . import module_A2 #.表示同级目录2.4 sys.path 和模块搜索路径
- 寻找模块文件的顺序
- 内置模块
- 当前目录
- 程序的主目录
- pythonpath 目录(如果已经设置了 pythonpath 环境变量)
- 标准链接库目录
- 第三方库目录(site-packages 目录)
- .pth 文件的内容(如果存在的话)
- sys.path.append()临时添加的目录
- 使用 sys.path 查看和临时修改搜索路径
# 在项目的 b 目录下建立测试模块 import sys sys.path.append( "d:/") print(sys.path)



