Python模块与包:10 大核心知识点 + 实战案例,模块化开发工程化必备 – 小白编程笔记

Python模块与包是Python工程化开发的核心基础。当你写的代码越来越多,把所有逻辑堆在一个文件里会变得难以维护,而Python模块与包就是解决这个问题的关键——它能帮你把代码拆分、分类、复用,让项目结构清晰、易于协作、可扩展性强。这篇文章我会用最通俗的话,从零讲透模块创建、导入方式、自定义包、第三方库安装等全套知识,零基础也能一看就会,练完就能写出专业规范的Python项目。

Python模块与包 核心知识体系总览图 模块化开发

图1:Python模块与包 – 核心知识体系总览

一、Python模块与包:什么是模块?为什么要用模块?

Python模块与包的体系里,模块(Module)本质上就是一个 .py 后缀的文件,里面可以写变量、函数、类,是Python模块与包最基础的单元。

  • 避免所有代码堆在一个文件里,结构更清晰(Python模块与包核心优势)
  • 提高代码复用性,一处定义,多处直接调用,不用重复写
  • 方便团队协作,每个人开发不同模块,最后拼起来就是完整项目
  • 避免变量名、函数名冲突,不同模块可以用相同名字的函数

举个最简单的例子:你写了一个计算加法的函数,把它存到 calc.py 里,这个 calc.py 就是一个模块,之后任何项目都能直接导入使用,不用再重新写一遍加法逻辑。

二、Python模块与包:模块的导入 4 种常用方式

Python模块与包中,使用 import 关键字导入模块,调用模块里的内容,是模块化开发的核心操作。下面给大家讲4种最常用的导入方式,每种都有适用场景,新手一定要分清。

Python模块与包 4种导入方式对比图 import from import as别名

图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.pyrandom.py,否则会覆盖系统模块,导致导入失败,这是新手最常犯的错误!

四、Python模块与包:什么是包(Package)?

Python模块与包中,包(Package)本质上就是一个文件夹,用来分类管理多个 .py 模块文件,同时必须包含一个 __init__.py 文件(包的标识),让项目结构更工程化、更易维护。

Python模块与包 标准包结构示意图 文件夹 __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__.pyPython模块与包中包的核心标识文件,除了标识包,还有很多实用功能,新手一定要了解:

  • 包的标识:告诉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.pyrandom.pyrequests.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导入模块
Python包结构
pip安装第三方库
Python标准库
Python入门

1人评论了“Python模块与包:10 大核心知识点 + 实战案例,模块化开发工程化必备 – 小白编程笔记”

  1. Pingback: Python核心编程:7大核心主题+实战进阶全攻略,小白一站式学Python - 小白 编程 笔记

发表评论

滚动至顶部
渝公网安备50022402001073号  |  渝ICP备2026004448号   © 2026 小白编程笔记