四、模块包(Package)学习笔记

四、模块包(Package)学习笔记

2026-02-21
Python基础
type
Post
status
Published
date
Feb 21, 2026
slug
python-package-module-notes-4
summary
把所有模块都平铺在项目根目录,文件多了就乱成一团。学会用包(Package)后,我可以把模块按功能分类放进不同文件夹,就像把书籍分类放在书架上,想找什么一目了然!
tags
category
Python基础
icon
password
💡 学习感悟:把所有模块都平铺在项目根目录,文件多了就乱成一团。学会用包(Package)后,我可以把模块按功能分类放进不同文件夹,就像把书籍分类放在书架上,想找什么一目了然!

1. 什么是包?

是一个包含 __init__.py 文件的文件夹,用于组织多个模块。
📝 我的理解:包就像是书架——__init__.py 是书架标签,文件夹里的 .py 文件是书,子包是书架上的分类区域。

2. 创建包

2.1 包的基本结构

📝 我的理解__init__.py 就像是包的门面——用户导入包时,首先执行这个文件,可以在这里做初始化、导常用功能。

2.2 init.py 的作用


3. 导入包

3.1 导入整个包

📝 我的理解import mypackage 导入的是 __init__.py 中暴露的内容。

3.2 从包导入模块


3.3 从包导入指定内容

📝 我的理解:从包导入就像是从书架取书——可以直接拿(from mypackage import add),也可以先找到分类再拿(from mypackage.math_tools import add)。

4. 子包

4.1 创建子包


4.2 导入子包

📝 我的理解:子包就像是书架上的分类区——mypackage.utils 是工具分类区,里面再放具体的工具书。

5. 相对导入与绝对导入

5.1 绝对导入

📝 我的理解:绝对导入就像是完整地址——从省市区到门牌号,不管在哪里都能准确找到。

5.2 相对导入

📝 我的理解:相对导入就像是邻居串门——.. 是楼上(父包),. 是隔壁(同级)。

5.3 相对导入规则

符号
含义
示例
.
当前目录
from . import module
..
上级目录
from .. import module
...
上上级目录
from ... import module
⚠️ 注意:入口文件(直接运行的文件)不能使用相对导入!

6. 包的 all 变量

6.1 控制包级导出


6.2 使用 * 导入

📝 我的理解:包的 __all__ 就像是白名单——告诉 Python,用 from mypackage import * 时,只允许导出这些内容。

7. 命名空间包(Python 3.3+)

7.1 无 init.py 的包

📝 我的理解:命名空间包就像是虚拟文件夹——不需要 __init__.py 也能当成包用,但功能有限。

7.2 普通包 vs 命名空间包

特性
普通包(有 init.py)
命名空间包(无 init.py)
初始化代码
✅ 支持
❌ 不支持
all 控制
✅ 支持
❌ 不支持
相对导入
✅ 支持
✅ 支持
跨目录合并
❌ 不支持
✅ 支持
💡 建议:普通项目还是使用普通包(带 __init__.py),功能更完整。

8. 踩坑记录

8.1 忘记创建 init.py

⚠️ 踩坑:Python 2 和普通包必须有 __init__.py,否则无法识别为包!

8.2 入口文件使用相对导入

⚠️ 踩坑:直接运行的文件(入口文件)不能用相对导入!用绝对导入或修改 sys.path

8.3 循环导入(包级别)

⚠️ 踩坑:包内的模块之间也可能循环导入,解决方案同普通模块。

9. 核心知识点整理

9.1 包结构速查


9.2 导入方式对比

方式
语法
使用场景
导入包
import mypackage
使用包中暴露的功能
导入模块
from mypackage import module
使用具体模块
导入函数
from mypackage.module import func
直接使用函数
相对导入
from . import module
包内模块间导入

9.3 包开发 checklist

创建 __init__.py 文件
添加包文档字符串
使用 __all__ 控制导出(可选)
__init__.py 中简化常用导入
避免入口文件使用相对导入
避免循环导入
推荐云服务

雨云 - 云服务器首选

稳定 · 高速 · 性价比超高

使用优惠码立享折扣,开启你的云端之旅~

一元试用秒级开通24h在线客服

优惠码

zqf
立即访问
Loading...
灵心小窝

灵心小窝

这里不是一个喧闹的地方,只是用来存放一些还不想遗忘的东西。

声明 © 2026 早清风
加载中...