Python-模块篇(模块介绍篇)
1、模块介绍
Python模块(Module)是Python代码组织和重用的基本单元,本质上是一个以.py结尾的Python源文件。
模块中包含了变量、函数、类以及可执行代码,通过模块可以将功能逻辑相关的代码集中封装,实现代码的拆分与复用,同时避免命名冲突,使项目结构更清晰。
核心作用:
- 代码复用:编写好的模块可以在不同的程序中被导入和调用,避免重复编写相同代码。
- 命名空间管理:不同模块中的同名变量或函数互不干扰,避免命名冲突。
- 代码组织:将相关功能(如数学计算、文件操作、数据处理)拆分到不同的文件中,提高代码的可读性和可维护性,便于团队协作。
1.1 包(Package)
- 定义:一个包含"__init__.py"文件的文件夹
- __init__.py作用:对包的导入行为进行控制,简化导入路径,以及实现包级别的初始化
# __init__.py VERSION = "1.0.0" #定义版本号、预加载配置、连接数据库池等 #from package import *:导入__all__中的模块 __all__ = ["module1", "module2"]
1.2 导入模块( import)
- 导入时会自动执行其中的代码,比如__init__.py
- 访问模块时才会触发导入
- 只会被真正导入并执行一次。后续的导入都直接从缓存
sys.modules中获取
- 导入的模块会被编译成.pyc文件,存放在__pycache__文件夹中(提升性能)
- 建议导入顺序:标准库 → 第三方库 → 本地应用/库。每组之间用空行分隔。
- 循环导入问题( A 导入 B,B 又导入 A):最佳解决方法是重构代码,将共同依赖的部分提取到一个新的独立模块中。
| 导入方式 | 使用方式 |
| import [包名].模块名1 [as 别名1], 模块名2 [as 别名2] |
[包名].模块名1.成员名 [包名].模块名2.成员名 |
| from 包名 import 模块名1 [as 别名1] | 模块名1.成员名 |
| from [包名].模块名 import 成员名1 [as 别名1] | 成员名1(不推荐,容易冲突) |
| from 模块名 import * | 成员名(不推荐,容易冲突) |
| from .. import 模块名 |
相对导入(不推荐,容易出错) 1、1个点表示当前目录,2个点表示上层目录 |
1.3 安装模块(pip)
pip 是 Python 的官方包管理工具(全称“Package Installer for Python”),用于查找、下载、安装、升级和卸载 Python 第三方库(包)。
- 更换pip镜像:pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
- -i选项:指定安装源
- --trusted-host:信任源
- ==, >=, <=, >, <:指定版本号
- 查看已安装的包:pip list
- 安装指定版本的模块:pip install -r requirements.txt
- 安装requests:pip install requests
- 更新requests:pip install --upgrade requests
- 卸载requests:pip uninstall requests
- 导出已安装模块及版本:pip freeze > requirements.txt
1.4 ModuleNotFoundError原因及解决办法
- 原因:导入模块时会在sys.path中找,找不到就报错
- sys.path:一个目录列表,包含执行程序所在目录、Python安装目录以及PYTHONPATH环境变量中的每个目录
- 添加目录到sys.path
- sys.path.append("模块路径")
- PYTHONPATH环境变量配置目录
1.5 跨包调用
|
main.py导入内容: from package_a.util_a import util_a_1 from package_b import temp_b from package_b.util_b import util_b_1 |
运行main.py,运行Pass |
#项目结构 package_b #包b |
|
temp_b.py导入内容: from util_b import util_b_1 |
运行temp_b.py,运行Pass |
运行main.py,出现ModuleNotFoundError: No module named 'util_b' 1、运行main.py时,导入temp_b,并且执行temp_b的导入 2、temp_b.py 此时所在目录为 main.py运行时所在的目录 3、在main.py所在目录执行导入from util_b import util_b_1就会报错 修改:from package_b.util_b import util_b_1 再次运行main.py:运行Pass |
|
temp_b.py导入内容: from package_b.util_b import util_b_1 |
运行temp_b.py, 出现ModuleNotFoundError: No module named 'package_b' 1、默认只能导入当前所在目录及下层目录的,不能导入上层目录的 2、解决:sys.path.append("package_b的上层目录") |
temp_b.py万能导入内容: try: from util_b import bUtil print("temp3.py直接运行执行导入") except Exception as e: from package_b.util_b import bUtil print("temp3.py被main.py运行执行导入") |
|
__init__.py预导入子模块、简化路径: #在 package_a/__init__.py 中 from .util_a import util_a_1 |
main.py中使用:from package_a import util_a_1 替代:from package_a.temp_a import util_a_1 |
更推荐方案1:将项目根目录永久添加到 更推荐方案2:在项目入口文件(如
优点:所有模块都可以统一使用绝对导入(如 |
本文来自博客园,作者:Fēngwèi,转载请注明原文链接:https://www.cnblogs.com/fengwei-blogs/p/21078416

浙公网安备 33010602011771号