跳转至

2023-06 模块与包补充

内容梗概

本课是第 10 章"第三方库与虚拟环境"的课堂补充,围绕"模块与包"的基本概念展开。老师先解释 Python 之所以流行是因为社区生态好——大量第三方开发者贡献了模块和包,并配有完善文档。随后厘清了模块(单个 .py 文件)与包(含 __init__.py 的文件夹)的区别,说明 __init__.py 的作用、pip install 安装的包实际落在 site-packages 目录,最后讲了包内部开发时使用相对路径导入(. 与 ..)的方法。

知识点详解

Python 社区生态与第三方库(约 00:00–00:53)

  • Python 火爆的专业说法是其**社区生态好**:热心开发者多,开发了大量"量大管饱"的模块和包,覆盖各种需求,可以快速构建自己的应用程序。
  • 大家还会编写各种文档,方便使用者快速查到某个包怎么用。

模块与包的区别(约 00:54–01:23)

  • 模块(module)就是文件:一个 xxx.py 就是一个模块。
  • 包(package)就是文件夹:把多个模块(a.py、b.py、c.py 等)放进同一个文件夹,就是一个包;包还可以有子文件夹(子包)。

__init__.py 的作用(约 01:23–02:50)

  • 包文件夹及其子文件夹下都会放一个 __init__.py("init" 是 initialization 的前四个字母,注意前后各两个下划线)。
  • Python 解释器加载到包文件夹时,会自动在文件夹里搜索 __init__.py,通过其中的内容**初始化包的基本环境或加载基本变量**。
  • 举例:一个音频库可能要在 __init__.py 中设置默认采样率(如 44100)、默认比特率(如 192 kbps)等参数,并写上包的名字等信息。

包的安装位置:site-packages(约 02:51–03:48)

  • 常用 pip install xxx(或 miniconda 环境下 conda install xxx)安装包,两者本质结果类似:都会把包下载、安装到 Python 安装目录下的 site-packages 文件夹中,这是 Python 内部的机制。
  • 排错思路:运行别人的项目时如果报"找不到包",可以先去 site-packages 目录查看该包是否存在;没有说明没装,用 pip install 安装即可。

包的导入与相对路径导入(约 03:49–05:32)

  • 包的导入和模块导入一样有多种写法(视频课中已详讲,本课不赘述)。
  • 做大型项目时,如果要以**包的开发者**身份在包内部互相调用模块(例如 sound 包的开发者在 waveread.py 里调用 effects 子包的功能),不能直接用包名导入,必须用**相对路径导入**:
  • from . import xxx(一个点):导入**当前目录**下的模块;
  • from ..effects import echo(两个点):导入**上一级目录**下其他子包中的模块。

示例与演示

  • 以课件中的经典 **sound 包**目录结构为例(sound/ 含 __init__.py、formats/、effects/ 等子包),讲解包的嵌套结构和 __init__.py 的分布。
  • 以"sound 包开发者想在 waveread.py 中使用 effects 里的 echo"为情境,演示相对导入写法:用 ..effects 访问上一级目录的子包。
  • 预告了后续演示:到虚拟环境中实际查看 site-packages 目录,验证包装在哪里(见 2023-07 课程)。

重点与难点

  • 核心概念一句话:模块就是文件,包就是文件夹,名字玄乎但本质简单。
  • __init__.py 的书写:前后各**两个**下划线,容易写错;它是解释器识别并初始化包的关键文件。
  • 包的使用者(import 包名)与包的开发者(包内部用 . / .. 相对导入)是两种视角,不要混淆;大型项目内部导入要用相对路径。
  • 遇到 ModuleNotFoundError 类报错的排查路径:先看 site-packages 里有没有,没有就 pip install。

关联内容

  • 属于第 10 章"第三方库与虚拟环境"(10.1 第三方库、10.4 离线安装与 whl 文件、10.5 虚拟环境管理、10.6 Python 与 Anaconda)的补充讲解。
  • 模块导入的多种写法在正课视频中已讲(对应"模块与包"章节),本课只做补充。
  • 为后续 2023-07(Conda 虚拟环境)中实地查看 site-packages 埋下伏笔;相对导入的知识与大型项目工程化相关。