首页 > 编程语言 >Python全栈工程师(5:模块)

Python全栈工程师(5:模块)

时间:2023-06-25 12:33:34浏览次数:40  
标签:__ Python py sys 全栈 导入 模块 import


模块介绍


第三方库一般存放在site-packages下

模块的定义:

一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。

在python中,模块的使用方式都是一样的,细分模块可以分为四个通用类别: 
  1 使用python编写的.py文件 (自定义模块)  
  2 已被编译为共享库或DLL的C或C++扩展  (开源模块)
  3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)  
  4 使用C编写并链接到python解释器的内置模块(内置模块)

模块的作用:

#1、从文件级别组织程序,更方便管理,不仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用;

#2、拿来主义,提升开发效率,可以下载别人写好的模块然后导入到自己的项目中使用可以极大地提升开发效率。

模块的使用

import本质:

绝对导入和相对导入

我们的最顶级包是写给别人用的,然后在包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以包作为起始

相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py

在glance/api/version.py

#绝对导入
from glance.cmd import manage
manage.main()

#相对导入
from ..cmd import manage
manage.main()

包以及包所包含的模块都是用来被导入的,而不是被直接执行的。而环境变量都是以执行文件为准的



导入模块:把python文件解释一遍;


  •  import module_name--->module_name.py-->module_name.py的路径-->sys.path


注释:

sys.path()  #系统路径


os.path.abspath(__file__) #获取当前文件

的绝对路径

os.path.dirname()  #获取目录名

导入包:执行该包下的__init__.py文件; 


  • import bag_name-->__init__.py(要想和导入模块有同样的效果,在__init__.py中写导入相应模块eg:from . import module_name)
  • 包的本质:本质是一个目录,从逻辑上组织模块(必须有__init__.py文件)

1、import module_name   #本质:路径搜索和搜索路径,导入模块的本质就是把python文件解释一遍。

      import modu1,modu2

2、from  ... import ...

     from ...import *

     from modu1 import method1,method2

3、from ... import ... as ...

#唯一的区别就是:使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.
#from...import...的方式有好处也有坏处
    好处:使用起来方便了
    坏处:容易与当前执行文件中的名字冲突


#from x import * 把x中所有的不是以下划线(_)开头的名字都导入到当前位置
可以使用__all__来控制*(用来发布新版本),在想x.py中新增一行
__all__=['money','read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字


py文件区分两种用途:模块与脚本

用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用
#python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:__name__ 等于'__main__'
    当文件被当做模块导入时:__name__等于模块名
#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __name__ == '__main__':

模块搜索路径

模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

#模块的查找顺序
1、在第一次导入某个模块时(比如spam),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用
    ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看
2、如果没有,解释器则会查找同名的内置模块
3、如果还没有找到就从sys.path给出的目录列表中依次寻找spam.py文件。
#自定义的模块名不应该与系统内置模块重名。
#在初始化后,python程序可以修改sys.path,路径放到前面的优先于标准库被加载。
>>> import sys
>>> sys.path.append('/a/b/c/d')
>>> sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索
注意:搜索时按照sys.path中从左到右的顺序查找,位于前的优先被查找,sys.path中还可能包含.zip归档文件和.egg文件,python会把.zip归档文件当成一个目录去处理。

#首先制作归档文件:zip module.zip foo.py bar.py 

#也可以使用zip中目录结构的具体位置
sys.path.append('module.zip/lib/python')
#windows下的路径不加r开头,会语法错误
sys.path.insert(0,r'C:\Users\Administrator\PycharmProjects\a')
 #.egg文件是由setuptools创建的包,这是按照第三方python库和扩展时使用的一种常见格式,.egg文件实际上只是添加了额外元数据(如版本号,依赖项等)的.zip文件。
#需要强调的一点是:只能从.zip文件中导入.py,.pyc等文件。使用C编写的共享库和扩展块无法直接从.zip文件中加载(此时setuptools等打包系统有时能提供一种规避方法),且从.zip中加载文件不会创建.pyc或者.pyo文件,因此一定要事先创建他们,来避免加载模块是性能下降。

import sys
sys.path.append('module.zip')
import foo,bar


sys.path从以下位置初始化 1 执行文件所在的当前目录 2 PTYHONPATH(包含一系列目录名,与shell变量PATH语法一样) 3 依赖安装时默认指定的


模块详解:

参考资料:

  • 一 time与datetime模块
  • 二 random模块
  • 三 os模块
  • 四 sys模块
  • 五 shutil模块
  • 六 json&pickle模块
  • 七 shelve模块
  • 八 xml模块
  • 九 configparser模块
  • 十 hashlib模块
  • 十一 suprocess模块
  • 十二 logging模块
  • 十三 re模块

标签:__,Python,py,sys,全栈,导入,模块,import
From: https://blog.51cto.com/u_12667998/6544805

相关文章

  • Python全栈工程师(31:css)
    css属性设置方法:方式1:在标签上设置style属性;<divstyle="height:10px;width:10px"></div>方式2:放在head里添加css模式;<head><style>#i1,#i2{height:10px;width:10px;}/*id选择器*/.c1{height:10px;width:10px;}/*class选择器*/div{height:10px......
  • python模块之hashlib
    用于加密相关的操作,3.x里代替了md5(不可反解)模块和sha模块,主要提供 SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法importhashlibm=hashlib.md5()m.update(b"He......
  • 成为python爬虫工程师需要哪些知识?
    爬虫(Webcrawler)是一种自动化程序,用于从互联网上抓取、解析和提取网页数据。它模拟浏览器行为,通过发送HTTP请求获取网页内容,并通过解析网页源代码或DOM结构,提取所需的信息。以python爬虫为例,作为一名合格的工程师需要具备那些专业技能?Python爬虫的难度可以因个人经验和项目需求而......
  • python 大根堆
    python默认的都是小根堆,实现数字的大根堆,可在堆化前把数字乘以-1,输出时再乘以-1变回原值。比如:[5,20,6],堆化前用列表推导式把列表转为: [-5,-20,-6]importheapqimportrandomdata=list(range(1,30))random.shuffle(data)#打乱顺序data=data[:12]#......
  • 基于k6和python进行自动化性能测试
    摘要:在性能测试中,达到相应的性能指标对于一个软件来说十分重要,在本文中,将介绍一种现代化性能测试工具k6。本文分享自华为云社区《基于k6和python进行自动化性能测试》,作者:风做了云的梦。当我们开发完成一个应用程序时,往往需要对其进行性能测试,以帮助我们更好的优化程序以及发现......
  • pytest + yaml 框架 -41.postman 和 python代码也能录制成用例
    前言python代码和postman写的接口也能通过录制功能自动生成yaml格式用例了。python代码运行后自动录制环境准备参考前面一篇https://www.cnblogs.com/yoyoketang/p/17495374.html在项目本地新建一个recorde.py,名称随便定义frompytest_yaml_yoyo.mitm_httpimportRecode......
  • 【雕爷学编程】Arduino动手做(126)---GP2Y0A02YK0F红外测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • BOSHIDA DC电源模块在PLC控制器中的应用
    BOSHIDADC电源模块在PLC控制器中的应用DC电源模块广泛应用于PLC控制器中,主要用于提供稳定的直流电源给控制器的各个部件,包括CPU、输入/输出模块、通讯模块等。 在PLC控制器中,DC电源模块通常作为控制器的一个模块,不同型号的控制器可能有不同的DC电源模块,但是它们的主要功能都......
  • Python生成简短的唯一ID
    GUID生成的ID太长,不方便使用,我想生成一个短的,最好不要有特殊字符,另外,只在本机使用,不跨网络,所以我使用当前时间作为生成的ID,为了使生成的ID更短一些,对它进行重新编码;另外,为防止短时间内有重复的ID,记录上次生成的ID并进行重复判断.代码如下:defGenerateI......
  • python测试
      importosimportshutildefcheck_dir_exist(dir):#如果目标路径不存在原文件夹的话就创建ifnotos.path.exists(dir):os.makedirs(dir)defremove_dir(dir):#如果目标路径存在原文件夹的话就先删除ifos.path.exists(dir......