图1:Python模块与包 – 核心知识体系总览
一、Python模块与包:什么是模块?为什么要用模块?
在Python模块与包的体系里,模块(Module)本质上就是一个 .py 后缀的文件,里面可以写变量、函数、类,是Python模块与包最基础的单元。
- 避免所有代码堆在一个文件里,结构更清晰(Python模块与包核心优势)
- 提高代码复用性,一处定义,多处直接调用,不用重复写
- 方便团队协作,每个人开发不同模块,最后拼起来就是完整项目
- 避免变量名、函数名冲突,不同模块可以用相同名字的函数
举个最简单的例子:你写了一个计算加法的函数,把它存到 calc.py 里,这个 calc.py 就是一个模块,之后任何项目都能直接导入使用,不用再重新写一遍加法逻辑。
二、Python模块与包:模块的导入 4 种常用方式
在Python模块与包中,使用 import 关键字导入模块,调用模块里的内容,是模块化开发的核心操作。下面给大家讲4种最常用的导入方式,每种都有适用场景,新手一定要分清。
图2:Python模块与包 – 4种模块导入方式核心区别对比
1. import 模块名(标准写法,最推荐)
这是最规范、最不容易出问题的写法,直接导入整个模块,使用时必须加「模块名.」前缀,能清晰区分模块内容,避免命名冲突。
# 导入Python标准库的math模块(内置模块,无需安装) import math # 使用模块里的函数/变量:模块名.函数名() / 模块名.变量名 print(math.sqrt(16)) # 计算16的平方根,输出4.0 print(math.pi) # 获取圆周率π,输出3.141592653589793
2. from 模块名 import 函数/变量(精准导入,简化调用)
如果只需要模块里的某几个函数/变量,用这种写法精准导入,使用时不用加模块名前缀,直接调用,适合只用到部分内容的场景。
# 从math模块中,只导入sqrt(开平方)和pi(圆周率)两个内容 from math import sqrt, pi # 直接使用,无需写math.前缀 print(sqrt(25)) # 输出5.0 print(pi) # 输出3.141592653589793
3. from 模块名 import *(不推荐,易引发命名冲突)
这种写法会导入模块里的所有内容,虽然写起来省事,但会把模块里的所有名字都导入当前作用域,非常容易和自己写的函数/变量重名,导致bug,新手尽量别用。
# 导入math模块的所有内容(不推荐,容易命名冲突) from math import * print(sin(90)) # 直接使用sin函数
4. import 模块名 as 别名(简化写法,适合长模块名)
如果模块名太长,每次调用都写全称太麻烦,用 as 给模块起一个简短的别名,后续用别名调用即可,是第三方库的常用写法。
# 给长模块名起别名,简化代码 import numpy as np # 数值计算库numpy,别名np,行业通用写法 import pandas as pd # 数据分析库pandas,别名pd,行业通用写法 # 用别名调用,代码更简洁 print(np.array([1,2,3])) # 创建numpy数组
三、Python模块与包:自定义模块 自己写 .py 文件
在Python模块与包中,不用只依赖系统内置模块,我们完全可以自己写一个 .py 文件,这就是一个自定义模块,直接导入就能用,是模块化开发的核心。
步骤1:创建模块文件 my_module.py
新建一个名为 my_module.py 的文件,在里面写变量、函数、类,就完成了一个自定义模块的创建。
# my_module.py 自定义模块文件
# 1. 定义模块变量
name = "我的第一个自定义模块"
# 2. 定义模块函数:实现加法运算
def add(a, b):
"""
加法函数,接收两个参数a和b,返回它们的和
:param a: 第一个数字
:param b: 第二个数字
:return: a + b 的结果
"""
return a + b
# 3. 定义模块类:学生类
class Student:
def __init__(self, name):
# 初始化学生姓名
self.name = name
def say_hello(self):
# 学生打招呼方法
print(f"你好,我是{self.name}")
步骤2:导入并使用自定义模块
在同一个目录下新建一个 main.py 文件,导入 my_module 模块,就能使用里面的变量、函数、类了。
# main.py 主文件,导入自定义模块
# 导入自定义模块my_module(和my_module.py在同一个目录下)
import my_module
# 1. 使用模块里的变量
print(my_module.name) # 输出:我的第一个自定义模块
# 2. 使用模块里的add函数
result = my_module.add(10, 20)
print(f"10 + 20 = {result}") # 输出:10 + 20 = 30
# 3. 使用模块里的Student类
s = my_module.Student("小明") # 创建学生对象
s.say_hello() # 调用方法,输出:你好,我是小明
新手必踩坑提醒
自定义模块的文件名绝对不能和Python内置模块重名!比如不要叫 math.py、random.py,否则会覆盖系统模块,导致导入失败,这是新手最常犯的错误!
四、Python模块与包:什么是包(Package)?
在Python模块与包中,包(Package)本质上就是一个文件夹,用来分类管理多个 .py 模块文件,同时必须包含一个 __init__.py 文件(包的标识),让项目结构更工程化、更易维护。
图3:Python模块与包 – 标准包结构示意图
- 包 = 文件夹,核心作用是分类管理多个模块(Python模块与包核心结构)
- 必须有 __init__.py 文件(可以是空文件,作用是告诉Python:这是一个包)
- 让项目结构更清晰,比如把工具类、业务类、工具函数分不同包管理
标准包结构示例
# 标准包目录结构
my_package/ # 包文件夹(包名)
__init__.py # 包标识文件(必须有,Python3.3+空文件也可)
module1.py # 包内的模块1
module2.py # 包内的模块2
sub_package/ # 子包(嵌套包,可选)
__init__.py
module3.py
导入包中的模块
包中的模块需要通过「包名.模块名」的方式导入,和普通模块导入逻辑一致。
# 方式1:导入包下的整个模块 from my_package import module1 # 调用模块里的函数:模块名.函数名() module1.func() # 方式2:直接导入包下模块里的函数 from my_package.module2 import my_func # 直接使用函数,无需写模块名 my_func() # 方式3:导入子包中的模块 from my_package.sub_package import module3
五、Python模块与包:__init__.py 作用详解
__init__.py 是Python模块与包中包的核心标识文件,除了标识包,还有很多实用功能,新手一定要了解:
- 包的标识:告诉Python解释器,这个文件夹是一个Python包,而不是普通文件夹
- 批量导出模块:在里面写导入语句,外部可以直接从包导入模块,不用写长路径
- 初始化包信息:定义包的版本号、作者、说明等信息
- 控制 `from package import *` 的导入内容:通过
__all__列表指定可导入的内容
# my_package/__init__.py 示例 # 1. 定义包的版本信息 __version__ = "1.0.0" __author__ = "小白编程笔记" # 2. 批量导出包内模块,外部可以直接 from my_package import module1 from . import module1, module2 # 3. 控制 from my_package import * 时,只导入module1和module2 __all__ = ["module1", "module2"]
六、Python模块与包:if __name__ == ‘__main__’: 作用详解
在Python模块与包中,这个写法是Python的标准写法,核心作用是:让一个 .py 文件既可以直接运行,又可以作为模块被导入,完美区分两种运行场景。
- 直接运行 .py 文件时:
__name__的值会被设置为'__main__',所以if里的代码会执行 - 作为模块被导入时:
__name__的值会被设置为 模块名,所以if里的代码不会执行
# my_module.py 示例
# 定义加法函数
def add(a, b):
return a + b
# 这段代码:直接运行文件时执行,被导入时不执行
# 通常用来写模块的测试代码,不影响外部导入使用
if __name__ == '__main__':
# 测试add函数
print(f"测试add函数:10 + 20 = {add(10, 20)}")
print("我是直接运行my_module.py时才会打印的内容")
这个写法的好处是:你可以在模块里写测试代码,直接运行文件就能测试,而别人导入你的模块时,测试代码不会执行,完全不影响使用,是模块化开发的必备写法。
七、Python模块与包:第三方库安装与使用(pip 详解)
Python 拥有全球最大的第三方库生态,在Python模块与包体系中,使用 pip 工具安装第三方库,就能快速扩展Python的功能,不用自己从零写代码。
pip 常用命令(新手必记)
# 1. 安装第三方库(最常用) pip install 库名 # 示例:安装网络请求库requests pip install requests # 示例:安装数值计算库numpy pip install numpy # 2. 安装指定版本的库 pip install 库名==版本号 # 示例:安装requests 2.31.0版本 pip install requests==2.31.0 # 3. 卸载第三方库 pip uninstall 库名 # 示例:卸载requests pip uninstall requests # 4. 查看已安装的所有第三方库 pip list # 5. 查看某个库的详细信息 pip show 库名 # 示例:查看requests的信息 pip show requests # 6. 升级pip到最新版本(解决pip版本过低问题) python -m pip install --upgrade pip
第三方库使用示例
安装完成后,就可以像导入内置模块一样,导入第三方库使用了。
# 导入第三方库requests(需要先pip install requests安装)
import requests
# 发送网络请求,获取百度首页的内容
response = requests.get("https://www.baidu.com")
# 打印响应状态码,200表示请求成功
print(f"请求状态码:{response.status_code}")
# 打印网页内容的前500个字符
print(f"网页内容预览:{response.text[:500]}")
八、Python模块与包:常用标准库(内置模块,无需安装)
Python内置了很多实用的标准库(模块),安装Python时就自带了,无需额外安装,是日常开发的高频工具,给大家整理了最常用的几个:
- os:文件/目录操作,比如创建文件夹、删除文件、获取当前路径(Python模块与包高频标准库)
- sys:系统相关操作,比如获取命令行参数、退出程序、修改模块搜索路径
- time/datetime:时间日期处理,比如获取当前时间、格式化时间、时间计算
- json:JSON 数据处理,实现Python对象和JSON字符串的相互转换
- random:随机数生成,比如生成随机整数、随机选择列表元素
- re:正则表达式,用于文本匹配、替换、提取等复杂文本处理
九、Python模块与包:高频易错点(避坑指南,新手必看)
整理了Python模块与包开发中,新手最容易踩的5个坑,每个坑都标了原因和解决方法,看完这些,再也不会因为这些问题报错:
坑1:自定义模块名与内置库重名,导致导入失败
不要创建 math.py、random.py、requests.py 等文件名,会覆盖系统内置库,导致导入时找不到正确的模块。解决方法:自定义模块名避开内置库名,比如叫 my_math.py。
坑2:包中缺少 __init__.py,无法识别为包
Python模块与包中,包必须包含 __init__.py 文件,否则Python会把它当成普通文件夹,无法导入里面的模块。解决方法:在包文件夹里新建一个空的 __init__.py 文件即可。
坑3:循环导入:模块A导入B,模块B导入A
两个模块互相导入,会导致程序启动时直接报错,是Python模块与包开发的大忌。解决方法:重构代码,把公共逻辑抽成第三个模块,避免循环依赖。
坑4:from xxx import * 滥用,引发命名冲突
用 * 导入模块所有内容,会把模块里的所有名字都导入当前作用域,很容易和自己写的函数/变量重名,导致bug。解决方法:尽量用 import 模块名 或 from 模块名 import 具体函数,避免用 *。
坑5:模块不在Python搜索路径中,导入失败
自定义模块放在了Python找不到的路径下,导入时会报 ModuleNotFoundError。解决方法:把模块放在主文件同级目录,或者把模块路径添加到 sys.path 中。
Python模块与包 延伸学习推荐
深入学习可参考Python官方模块与包文档;
学完模块与包,可回顾Python文件操作与异常处理、Python面向对象编程,实现模块化+OOP结合的工程化开发。
十、Python模块与包:核心知识点总结(快速复习)
- 模块 = .py 文件,用于封装变量、函数、类,是Python模块与包的基础单元
- 包 = 文件夹 + __init__.py,用于分类管理多个模块,让项目工程化
- 4种导入方式:import 模块名、from…import、import…as 别名、from…import *(不推荐)
- if __name__ == ‘__main__’:区分直接运行与被导入,用于写模块测试代码
- __init__.py:包的标识,可批量导出模块、定义包信息、控制*导入内容
- pip:安装第三方库的工具,常用命令:install、uninstall、list
- Python模块与包是模块化开发的核心,能让代码更清晰、复用性更强、更易维护
版权声明:本文所有内容(含代码、图片、文字)均为原创,未经授权禁止任何形式的转载、抄袭、洗稿
如需转载,请联系作者获得授权,并在正文开头显著位置标注原文链接和作者信息!
下一篇:Python 正则表达式,文本处理神器!
Python模块与包
Python模块化开发
Python导入模块
Python包结构
pip安装第三方库
Python标准库
Python入门

渝公网安备50022402001073号
Pingback: Python核心编程:7大核心主题+实战进阶全攻略,小白一站式学Python - 小白 编程 笔记