总结一下Python的模块加载解析

雷学委 2021-10-26 04:09:26
总结 Python 模块 加载 一下

正式的Python专栏第16篇,同学站住,别错过这个从0开始的文章!

学委之前分享了很多代码,也发布了几个库。

新手可以从两篇基础文章入手学习,积累了一些代码,可以考虑做成一个个模块包装代码有利调用和传播!

何为模块

小雷拿了一个短棍,一个铁方块,接着把铁块跟短棍焊接一起,就是我们看到的雷神之锤了!(如下,一把简陋的锤子)

在这里插入图片描述

为什么说这个锤子?

模块就是一组python功能集合,比如sys, 或者requests这个就是一个模块,或者学委开发的pypiseed也是一个模块,简单理解就是,把基础python代码组合成为一个’锤子‘,被外部使用。

制作模块的意义是,方便更多的模块使用者(开发者)就不用太拘泥这个模块怎么做,简单就调用一个模块。

下面os.py, python自带的模块,这是一个模块!
在这里插入图片描述
下面requests目录, 是学委自己安装的, 这也是一个模块!
在这里插入图片描述
下面的pypi-seed, 也是一个模块,更多介绍在这篇种子项目文章

在这里插入图片描述

模块 vs 库(包) 区别

模块可以是一个python文件, 学委认为也可以是一个库(多个python文件的整体)。

但是我们说一个库,通常就是上面提到的pypi_seed 或者requests这些目录组织的,通常包含多个python代码文件,也就是说复杂度更高,可以理解为‘复杂模块’。

直白来说都是一种“封装”,包装,把零散的功能组合起来,就成做出一个个‘锤子’,解决各种开发遇到的问题。

在python里面也使用“package”(包)来概括这种复杂模块。

在这里插入图片描述
如上图,‘moduledemo’ 就是一个包(package)。

所以严格来说:包 对等于 库,包内有多个模块。使用上包/库/模块都是用‘import’来导入。

制作模块与使用

开发模块

保存下面代码为debug.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/15 11:12 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : debug.py
# @Project : hello
SHOW_DEBUG = True
def log(log):
if SHOW_DEBUG:
print(str(log))

只需要打开安装的python路径里面的lib/python3.8/os.py

在这里插入图片描述
把os.py的代码过一遍,我们可以发现,其实os用了abc/sys/stat这些内置模块,实现了os模块自己的函数比如makedirs(创建目录)或者拓展os.path。

制作一个复杂模块请参考详细指导篇,处理明确模块的功能开发规划,更重要的就是组织,管理发布模块了,这涉及很多知识,请看下面的文章:

保姆级教程带你开发优质的Python库之上篇【模块组织】
保姆级教程带你开发优质的Python库之中篇【命令行】
保姆级教程带你开发优质的Python库之下篇【种子项目】

调用模块 import

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/10/15 11:15 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : test.py
# @Project : hello
#option 1
import debug
debug.log("hello 01")
#option 2
from debug import log
log("hello 01")
#option 3
from debug import log as l
l("hello 01")

这里展示了三种调用方式,效果都是一样的。

也可以像下面一样:from 模块名称 import * (任意函数)

from debug import *

包或者库的函数调用参考下面:

#import 包名.模块名 imiport * 或者 (import 特定函数)
from pypiseed.main import *

直接运行一个模块

这个也非常简单,在开发的debug.py模块中添加下面的代码到文件末:


if __name__ == "__main__":
log("testing")

运行方式:python debug.py

这个就是告诉python程序这里是main入口程序,里面放入调用模块函数的代码,即可运行。

模块搜索, 定个位

在python中模块是这样被定位/搜索的:

  • 最先从当前运行目录查找模块
  • 如果还没有找到,python尝试搜索PYTHONPATH环境变量指定的多个目录,从前到后一个一个目录查找目标模块
  • 如果前面两个步骤仍旧没有找到,python解析器将会查找默认路径,比如/usr/local/lib/python3/

这上面其实都是路径,我们看到python的模块系统使用了sys.path这个变量来存储,所以直接简记为:从sys.path值里面的目录一个一个查找搜索模块。

sys.path的只也默认的被设置为当前路径,PYTHONPATH, 系统默认(跟安装路径有关),如下图:

在这里插入图片描述

几个模块相关的函数

reload 模块重载函数

我们刚刚看到os.py 出来def 定义了一些函数,还有一些类似"all" 这样的代码,这些代码只会在import/ from import 语句导入模块的时候被执行,我们可以使用reload函数重新加载非方法定义的代码。

使用实例:

#重新加载debug模块,那些在方法体外直接执行的代码会再次被运行。
reload(debug)

dir 罗列函数

dir函数也是内置函数之一,它返回一个排序过的列表。这个列表就是当前程序运行时导入的所有模块。

如下图,分次倒入了不同模块,dir函数的返回值不同了。
在这里插入图片描述

延伸

Python的模块加载跟Java的其实还是有点相像的。

不过Java的会更加复杂一些。Python还支持运行时动态更改模块搜索的路径,这个特性比Java更加灵活,后面会继续分享文章讲解。

对了,喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏

持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注微信,点赞支持收藏!

版权声明
本文为[雷学委]所创,转载请带上原文链接,感谢
https://levin.blog.csdn.net/article/details/120799559

  1. Python project management and construction, these four tools are enough!
  2. IDE的使用,pycharm引入Python库
  3. In the 120 series columns, you can learn the python beautiful oup4 module, 7000 word blog + climb the ninth workshop network
  4. Django运行xadmin 报错解析 ImportError: cannot import name 'DEFAULT_FORMATS' from 'import_export.admin'
  5. Python程序大学课程写程序
  6. Programme Python Programme d'études collégiales
  7. Python程序大學課程寫程序
  8. Django runxadmin Error resolution importerror: cannot Import name 'default Formats' from 'import _ Export.admin»
  9. Python 函数式编程,看这一篇足够了!
  10. 太棒了!11个好用到起飞的「Python字典」知识点!
  11. 一道Python题目,求解答!
  12. 一道Python題目,求解答!
  13. Un problème Python, s'il vous plaît!
  14. C'est génial! 11 points de connaissance du dictionnaire Python pour le décollage!
  15. Python Functional Programming, This is enough!
  16. 在python中beta分布的问题?
  17. 一个python习题,没有什么头绪,是关于进制的转换和绘制的,想了几天了,不仅仅是2,8,16这种常见的进制转换
  18. Un exercice Python, qui n'a pas beaucoup d'idées, est sur la conversion et le rendu décimaux et a pensé pendant quelques jours, pas seulement 2, 8, 16 cette conversion décimale commune
  19. Un problème avec la distribution bêta en python?
  20. python实现简单的读取excel 内容,报错
  21. L'implémentation Python lit simplement le contenu d'Excel et signale les erreurs
  22. 用Python定义一个函数,接收n个数字,求这些参数数字的和
  23. Définissez une fonction en python, recevez n nombres et additionnez ces nombres de paramètres
  24. 上电Python写文件后,再断电后导致文件内容丢失
  25. 上電Python寫文件後,再斷電後導致文件內容丟失
  26. Une fois que Python est allumé pour écrire des fichiers, le contenu des fichiers est perdu après une panne de courant
  27. python套接字编程报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
  28. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)
  29. 【Python从入门到精通】(二)怎么运行Python呢?有哪些好的开发工具(PyCharm)
  30. Python语法1
  31. 2018年度最受推荐的10本Python书籍(初学者必看)
  32. Les 10 livres Python les plus recommandés en 2018 (obligatoire pour les débutants)
  33. Syntaxe Python 1
  34. Python语法1
  35. 在python 运行celery时候 AttributeError: 'NoneType' object has no attribute 'Redis'错误
  36. Attributeerror: 'nonetype' Object has no attribute 'redis' Error when Celery is running in Python
  37. Syntaxe Python 1
  38. Python celery is a plug-in that focuses on distributed asynchronous task processing and task scheduling!
  39. Python celery is a plug-in that focuses on distributed asynchronous task processing and task scheduling!
  40. 在python,使用scrapy爬虫框架
  41. It's time for everyone to see your blog written in Django (including deployment tutorial video)
  42. Python扩展速记符 要求用for循环,if语句
  43. Python擴展速記符 要求用for循環,if語句
  44. Le sténographe d'extension Python nécessite une boucle pour, si instruction
  45. Python+人工智能就业班v5.0wumi
  46. python编程技术的题目,希望能得到解答
  47. Pandas determines the header row dynamically
  48. 关于#python#的问题:模拟登陆后能获取到cookie,就是cookie一天就过期
  49. pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补
  50. pandas使用组合条件筛选、过滤数据行
  51. 热烈祝贺1024,求解Python3.10闪退问题
  52. Python基础题练习题库有没呢?
  53. python构建神经网络,正向和反向传播
  54. python爬虫输入数字翻页才成功,用变量代替不成功,为什么?
  55. 【Python 爬虫】 2、HTTP基本原理
  56. 【Python 爬虫】 1、爬虫基础概念
  57. Python中如何用find函数计数?
  58. 一文搞懂Python装饰器
  59. python数据结构之递归
  60. 关于#python#的问题:为什么这个open函数会报错