模块和库的导入
知识点回顾:
- 导入官方库的三种手段
- 导入自定义库/模块的方式
- 导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致)
作业:自己新建几个不同路径文件尝试下如何导入
python的学习就像是学一点常见的基础语法,再去针对性地学习处理任务需要用到的库,库的导入很简单:
- 标准导入整个库,import xxx
- 从库中导入特定项,from xxx import yyy
- 非标准导入整个库,from xxx import *(和上面导入库中特定项一样,用的时候可以不用加库的前缀)
------------------------------------------------- 相关概念辨析一下 ------------------------------------------------------
模块(Module)
- 本质:以 `.py` 结尾的单个文件,包含Python代码(函数、类、变量等)
- 作用:将代码拆分到不同文件中,避免代码冗余,方便复用和维护
包(Package)在python里,包就是库
- 本质:有层次的文件目录结构(即文件夹),用于组织多个模块和子包
- 核心特征:包的根目录下必须包含一个 `__init__.py` 文件(可以为空),用于标识该目录是一个包
- ---------------------------------------------------------------------------------------------------------------------------------
IDE通常会将你打开的项目文件夹设为“根目录”(或者说,运行时的工作目录)。Python 在导入模块时,会从这个根目录(以及其他一些标准位置和脚本所在的目录)开始查找,具体操作中,模块导入可以按目录层级分为以下三种类型:
1.同级目录导入
- 场景:当前脚本和要导入的模块文件在同一个目录下
- 方法:直接使用上面提到的三种导入库的方式
project/
├── main.py # 当前脚本
└── utils.py # 要导入的模块
# main.py 中导入 utils.py
import utils
utils.some_function()
# 或使用 from 语法
from utils import some_function
some_function()
2.子目录导入
- 场景:要导入的模块位于当前脚本的子目录中
- 方法:需要将子目录转换为 Python 包,再通过包路径导入
project/
├── main.py
└── subdir/
├── __init__.py # 空文件,标识这是一个包
└── utils.py # 子目录中的模块
# main.py 中导入子目录模块
from subdir import utils
utils.some_function()
# 或者只导入相关函数
from subdir.utils import some_function
some_function()
3.跨目录导入
- 场景:要导入的模块位于完全不同的目录层级(如父目录、兄弟目录等)
- 方法:需动态修改
sys.path
或使用绝对导入(Python 3.3+ 支持命名空间包) project/
├── parent_dir/
│ └── utils.py
└── child_dir/
└── main.py # 需要导入 ../parent_dir/utils.py
# main.py 中动态添加父目录到 Python 路径
import sys
import os
# 获取父目录路径并添加到 sys.path
parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)
# 现在可以导入父目录中的模块
from parent_dir import utils
utils.some_function()
直接在终端运行python -m child_dir.main也可以将父目录路径添加到sys.path