当前位置: 首页 > article >正文

8. Python 模块与包 深度解析

Python 模块与包 深度解析目录模块与包的概念模块基础2.1 模块即.py文件2.2import语句与from ... import2.3 模块搜索路径sys.path模块的编译与缓存包4.1 常规包与__init__.py4.2 命名空间包4.3 相对导入与绝对导入__name__与__main__模块与包的组织建议常见陷阱与最佳实践总结1. 模块与包的概念在 Python 中模块是包含 Python 定义和语句的文件通常以.py为扩展名。包则是一种组织模块的层次化目录结构允许多个模块组成一个命名空间。为什么需要模块与包代码复用将常用功能封装到一个文件中在其他地方导入即可。命名空间管理避免不同模块中的同名变量/函数冲突。逻辑组织将大型程序拆分为多个更小、更易维护的部分。2. 模块基础2.1 模块即.py文件任何.py文件都可被视为一个模块。假设我们有一个math_utils.py# math_utils.pyPI3.14159defcircle_area(radius):returnPI*radius**2在其他文件中就可以导入并使用它假设两个文件在同一目录importmath_utilsprint(math_utils.PI)# 3.14159print(math_utils.circle_area(2))# 12.566362.2import语句与from ... importimport 模块名导入整个模块需要通过模块名前缀访问其内容。from 模块名 import 名字直接将指定名字导入当前命名空间无需模块名前缀。from 模块名 import *导入该模块的所有公开名字不推荐容易污染命名空间。frommath_utilsimportcircle_area,PIprint(circle_area(3))# 28.27431# 使用别名importmath_utilsasmu mu.circle_area(4)frommath_utilsimportcircle_areaasca ca(4)Python 的导入是动态的意味着导入可以在函数内部甚至条件语句中进行但通常建议把导入放在文件顶部。2.3 模块搜索路径sys.path当执行import something时Python 解释器会按顺序在sys.path中的目录里搜索something.py或something/__init__.py如果是包。sys.path的初始值包括包含输入脚本的目录或当前目录如果以交互方式启动解释器。PYTHONPATH环境变量中的目录。标准库目录。第三方库site-packages目录。可以通过sys.path.append(...)临时添加搜索路径但不建议用作长期方案更好的做法是正确安装包pip install -e .可编辑安装或调整PYTHONPATH。3. 模块的编译与缓存当模块被首次导入时Python 会将其编译为字节码并保存在__pycache__目录下文件名为module.version.pyc。再次导入时若源文件未修改Python 会直接使用缓存加快加载速度。这个机制完全自动化通常无需干预。4. 包4.1 常规包与__init__.pyPython 3.3 之前一个目录必须包含__init__.py文件才能被视为包。自 3.3 起命名空间包允许没有__init__.py的目录成为包但含有__init__.py的常规包仍然是推荐做法因为它能显式定义包级变量或执行初始化代码。包结构示例mypackage/ __init__.py core.py utils/ __init__.py helpers.py__init__.py可以为空也可以定义__all__变量控制from package import *的行为或执行包初始化任务。# mypackage/__init__.py__all__[core,utils]print(mypackage 初始化中...)导入包时__init__.py中的代码会运行这将定义一个包级别的命名空间其中包含其他子模块/子包的引用。4.2 命名空间包命名空间包是不包含__init__.py的包它由多个目录联合构成常用在将一个大型包拆分为多个发行版时例如tensorflow的子包。一般开发者编写应用时使用常规包即可。4.3 相对导入与绝对导入在一个包内部可以使用相对导入来引用同级的模块避免硬编码包名。绝对导入从项目根或顶级包开始写全路径。frommypackage.utils.helpersimportclean_data相对导入使用.表示当前包..表示上一级包。相对导入只能用于包内部不能用于顶层脚本。# 在 mypackage/core.py 中from.utils.helpersimportclean_data# 相对导入同级 utils 包中的 helpersfrom..importsome_module# 导入上级包如果一个.py文件作为顶层脚本运行__name__ __main__它不能使用相对导入因为相对导入必须建立在__package__信息的基础上。这是很多初学者遇到的 “Attempted relative import beyond top-level package” 错误的根源。解决办法是将脚本功能改为通过模块入口执行或使用绝对导入。5.__name__与__main__每个模块都有一个内置变量__name__当模块被直接执行时例如python mymodule.py__name__被设置为__main__。当模块被导入时__name__被设置为模块自身的名称。这允许模块既可作为独立脚本运行也可被其他模块安全导入而不执行无关代码。# mymodule.pydefgreet(name):print(fHello,{name}!)if__name____main__:print(模块被作为脚本运行)greet(World)运行python mymodule.py会打印问候语而在其他文件中import mymodule时只导入函数不会执行末尾的print。这是 Python 中非常常见的惯用法。6. 模块与包的组织建议一个结构清晰的项目通常会按功能分层组织模块与包。示例myproject/ ├── myproject/ │ ├── __init__.py │ ├── main.py │ ├── config.py │ ├── models/ │ │ ├── __init__.py │ │ └── user.py │ ├── services/ │ │ ├── __init__.py │ │ └── data_processor.py │ └── utils/ │ ├── __init__.py │ └── helpers.py ├── tests/ │ ├── __init__.py │ └── test_helpers.py ├── setup.py └── README.md通常在项目根目录下有一个与项目同名的包如myproject/源码都放在该包内tests独立存放。这个结构便于分发和安装。7. 常见陷阱与最佳实践循环导入模块 A 导入模块 B模块 B 又导入模块 A。这会导致AttributeError因为模块在还未完全初始化时就被访问。解决方案将互相依赖的名称提取到第三个模块。延迟导入在函数内部使用import。重新设计代码结构降低耦合。避免使用from module import *它会导入模块中所有非下划线开头的名字无法控制容易覆盖当前命名空间的同名变量。如果需要批量导入应在模块中定义__all__列表。把导入放在文件顶部除了为避免循环导入而进行的延迟导入外保持导入在顶部是 PEP 8 建议使依赖关系一目了然。不要将可执行脚本放在包内运行当需要运行包内某模块时使用python -m mypackage.mymodule而非直接python mypackage/mymodule.py这能正确设置__package__让相对导入正常工作。管理搜索路径开发时要把项目根目录加入PYTHONPATH或使用虚拟环境并pip install -e .进行可编辑安装避免手动sys.path.append。8. 总结模块与包是 Python 代码组织的基础单元。借助清晰的层级结构和明智的导入策略你可以将代码分割为可复用、易维护的组件。掌握绝对导入与相对导入的区别、了解__name__ __main__的惯用法以及正确设计包结构能够帮助你写出专业、健壮的 Python 项目。在后续学习中你还会看到如何将包打包并发布到 PyPI让世界共享你的代码。

相关文章:

8. Python 模块与包 深度解析

Python 模块与包 深度解析 目录 模块与包的概念模块基础 2.1 模块即 .py 文件2.2 import 语句与 from ... import2.3 模块搜索路径 sys.path 模块的编译与缓存包 4.1 常规包与 __init__.py4.2 命名空间包4.3 相对导入与绝对导入 __name__ 与 "__main__"模块与包的组…...

Lean开发环境终极解决方案:3步完成版本管理工具配置

Lean开发环境终极解决方案:3步完成版本管理工具配置 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan elan是专为Lean定理证明器设计的智能版本管理工具,能够自动处理Lean和lake二进制文件的安…...

3步掌握抖音批量下载:终极免费无水印下载器完整指南

3步掌握抖音批量下载:终极免费无水印下载器完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

BarrageGrab:企业级多平台直播弹幕一体化采集解决方案

BarrageGrab:企业级多平台直播弹幕一体化采集解决方案 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连,非系统代理方式,无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在直播电商、游戏…...

FreeMove:Windows系统C盘空间终极清理方案,无需重装释放数十GB

FreeMove:Windows系统C盘空间终极清理方案,无需重装释放数十GB 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘空间不足而烦恼吗&…...

千问 LeetCode 2543. 判断一个点是否可以到达 Java实现

这道题的核心思路是从终点反向推导回起点,并利用最大公约数(GCD) 的性质来判定。核心思路从 (1, 1) 正向推导到 (targetX, targetY) 路径太多,不好下手。我们反过来想:从 (targetX, targetY) 能否通过逆操作回到 (1, 1…...

5.12linux自学

1,安装vMware2,部署Kali Linux虚拟机3,了解Linux的优点:多人多任务环境安全性高4,格式化的概念:每种操作系统所配置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要进行格式化,以成为操作系…...

Warcraft Helper:现代Windows环境下魔兽争霸3兼容性技术解决方案深度解析

Warcraft Helper:现代Windows环境下魔兽争霸3兼容性技术解决方案深度解析 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper Warcraft Helper…...

告别焦虑等待!Elsevier投稿状态自动追踪插件,让你的科研进度一目了然

告别焦虑等待!Elsevier投稿状态自动追踪插件,让你的科研进度一目了然 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在每天刷新Elsevier投稿页面,只为查看论文审稿状态吗&…...

注意力机制:多头注意力机制、分组查询注意力机制、多查询注意力机制理论+代码

文章目录导语1.注意力机制2.多头注意力机制3.多查询注意力机制4.分组查询注意力机制5.三者对比导语 注意力机制作为transformer体系中最核心的方法,是NLP、LLM等都绕不开的一部分,多头注意力机制是transformer模型提出的“基石”,分组查询注…...

ZenTimings:AMD Ryzen用户的硬件监控与性能优化利器

ZenTimings:AMD Ryzen用户的硬件监控与性能优化利器 【免费下载链接】ZenTimings 项目地址: https://gitcode.com/gh_mirrors/ze/ZenTimings 在AMD Ryzen平台日益普及的今天,如何精准掌握硬件运行状态成为许多用户关心的问题。ZenTimings作为一款…...

ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本更安静更智能

ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本更安静更智能 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 还在为ThinkPad笔记本风扇噪音而烦恼吗&…...

抖音无水印批量下载终极指南:douyin-downloader免费神器

抖音无水印批量下载终极指南:douyin-downloader免费神器 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...

深度解析Unity游戏实时翻译插件:XUnity.AutoTranslator的5大实战应用场景与架构设计

深度解析Unity游戏实时翻译插件:XUnity.AutoTranslator的5大实战应用场景与架构设计 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款革命性的Unity游戏实时翻译插…...

HoRain云--AI 底层架构

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

ContentBranch+CFBranch混合电影推荐模型|全网独家复现,深度学习实战篇 引入双分支融合架构,兼顾内容特征与协同信号、助力冷启动缓解、数据稀疏性优化、推荐精度有效涨点

目录 一、前言:混合推荐模型的核心价值与行业痛点 二、模型核心原理(全网独家拆解,通俗易懂) 2.1 整体架构逻辑 2.2 ContentBranch(内容分支)原理详解 2.3 CFBranch(协同过滤分支)原理详解 2.4 特征融合与预测层原理 2.5 模型优势总结 三、环境搭建(全平台适配…...

免费开源AMD Ryzen硬件调试神器:SMUDebugTool完整使用指南

免费开源AMD Ryzen硬件调试神器:SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...

穆斯堡尔谱—固态研究中不可或缺的工具

...

如何高效批量下载抖音无水印视频:开源工具完整实战指南

如何高效批量下载抖音无水印视频:开源工具完整实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

[智能体-2]:openAI API详解

下面从核心概念→认证→接口→参数→流式→函数调用→计费→国内兼容→最佳实践,把 OpenAI API 讲透。一、OpenAI API 是什么OpenAI API 一套标准化的 RESTful 大模型调用协议,基于 HTTP/JSON,提供:文本对话(GPT-4o/3…...

Voice-Pro 免费开源杀疯了:语音翻译、AI克隆、人声分离、YouTube下载全打包,狂省上千元

你是否也曾想过做视频,英文视频翻译成中文发到国内,或者把自己做的中文视频配上地道的英文,扬帆出海? 然而,现实往往会给你迎头痛击: 工具太碎片 :用 yt-dlp 下载了视频,要用 Demu…...

低压电工-架空线路,室内线路

前置基础补充 线路核心定义电能输送用的电线线路统称电气线路,电工考证只重点学电力线路(送电、供电),不学控制线路(设备内部控制线)。电压基础 低压:1000V 及以下(日常家用、工厂…...

BarrageGrab:零依赖微服务架构的跨平台直播弹幕一体化采集系统

BarrageGrab:零依赖微服务架构的跨平台直播弹幕一体化采集系统 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连,非系统代理方式,无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在直播电…...

需求用例-成功保证

成功保证(success guarantee)说明了用例成功结束后项目相关人员的哪些利益得到了满足,用例可以通过执行主场景获得成功,也可以通过执行可选路径获得成功。成功保证通常是作为最小保证的补充内容:最小保证被满足以后, 第6章 前置条件、触发事件…...

G-Helper:轻量级开源硬件控制工具的深度技术解析

G-Helper:轻量级开源硬件控制工具的深度技术解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertb…...

NVIDIA Profile Inspector完整指南:免费解锁显卡隐藏性能的终极工具

NVIDIA Profile Inspector完整指南:免费解锁显卡隐藏性能的终极工具 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾经想过,为什么你的NVIDIA显卡明明性能不错&#xff…...

seaborn实践

本文章基于豆包整理了使用seaborn生成若干典型图表的示例代码,可供学习seaborn使用。一、图表结果预览二、测试数据生成生成了两组数据,一组是银行贷款存款数据,一组是学生成绩数据,生成数据代码如下:-- 1. 创建数据库…...

在Windows通知栏悄悄学习:ToastFish让你的碎片时间变成单词记忆神器

在Windows通知栏悄悄学习:ToastFish让你的碎片时间变成单词记忆神器 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 想象一下这样的场景:你正在办公室里忙碌地处理文件…...

ZIP文件怎么加密?3种方法可行

如果你想给ZIP文件设置密码保护,那就一定要安装解压缩软件,因为Windows自带的ZIP压缩,点右键选“发送到”→“压缩文件夹”——这个功能不支持加密。 那么我们可以选择常用的软件来给ZIP文件加密,方法都很简单,下面分…...

Midjourney拍立得风格失效预警:当--stylize值>800时,胶片颗粒算法将触发不可逆失真(附修复补丁)

更多请点击: https://intelliparadigm.com 第一章:Midjourney拍立得风格失效的本质洞察 当用户在 Midjourney 中反复使用 --style raw 或添加 Polaroid、 Instax、 instant film 等关键词却无法稳定生成具有真实拍立得质感的图像时,问题并…...