python的模块、包、库区别。导入包/模块的方式

直接进入主题,如果觉得文章可以,记得点点赞和关注,我主要会写一些在学习过程中遇到的困难

模块

为了使代码更容易维护,提高代码重用价值:可以将一组相关功能的代码写入一个单独的.py文件中;使别人导入使用;这个.py文件就被称作是一个模块

当我们使用 import 语句导入模块时,Python解释器首先会去内置名称空间中寻找,即判断导入的模块是不是内置模块(例如time模块就是Python内置模块),然后再去 sys.path 列表中定义的路径从前往后寻找 .py文件
如下是在个人笔记本上输出的 sys.path列表:

>>> import sys
>>> sys.path
['', 'D:\\Pycharm\\pychon_jieshiqi\\python37.zip', 'D:\\Pycharm\\pychon_jieshiqi\\DLLs', 'D:\\Pycharm\\pychon_jieshiqi\\lib', 'D:\\Pycharm\\pychon_jieshiqi', 'D:\\Pycharm\\pychon_jieshiqi\\lib\\site-packages']
>>>

包是一个有层次的文件目录结构,它定义了由相关的(或者说是在这个模块里需要调用另一个模块)n个模块或n个子包。包含__init__.py文件的目录,这个目录下一定的有则会个__init__.py文件和其他模块或子包。在调用这个包时都会执行package 包下和子包下init 文件。

现在有如下目录结构:
├─ROOT
│ ├─pk_1
│ │ ├─__init__.py
│ │ ├─m1.py
│ ├─pk_2
│ │ ├─__init__.py
│ │ └─m2.py
│ ├─__init__.py
│ ├─test.py
pk_1 和 pk_2 包中的 init.py 文件都为空,ROOT包下的 test.py 想要使用 pk_1 包下 m1模块中的方法,可以使用如下语句:

#test.py
from pk_1 import m1
m1.fun_1()        # fun_1() 为m1模块中的方法

但是使用如下语句,就会抛出异常:

#test.py
from pk_1 import *
m1.fun_1()
# 异常信息:
NameError: name 'm1' is not defined
*****************************************************************
*****************************************************************
#test.py
import pk_1
pk_1.m1.fun_1()
# 异常信息:
AttributeError: module 'pk_1' has no attribute 'm1'

这时候可以在 pk_1 包中的__init__.py 中 进行 包提升(在包中提升导入权限),pk_1 包的 init.py 文件内容如下:

#pk_1包下的_init_.py
from pk_1.m1 import fun_1

然后在 test.py 文件中可以直接通过包名引入方法:

1)

from pk_1 import fun_1 # 或 from pk_1 import *
fun_1()

2)

import pk_1
pk_1.fun_1()

这个就是 包中 init.py 文件存在的意义,可以将相关的导入语句 或 提升导入权限的语句 写在 init.py文件中,这样使用者就不需要了解包中的内部结构,可以直接通过包名 调用该包(package)中某个模块的方法~

参照其他编程语言的一个喊法;完成一定功能的代码集合,具体表现可以是一个模块,也可以是包。库可以理解为仓库,例如标准库,则是一组很多的想numpy,matplotlib等这么多的包,或者模块。

总结:

模块<包<库

导入包/模块的方式:(这一块的知识点比较琐碎,需要自己多做实验慢慢体会掌握)

	import M          #导入单个模块
	import P.M        #导入P包里的某单个模块,会自动执行P里面的__init__.py文件
	import P.sub_p.M  #导入P包里的子包sub_p里的单个M模块,会自动执行P里的__init__.py和sub_p里的__init__.py文件
	import M1,M2      #导入多个模块,或者用两次import
	补充:
		如果导入的是一个包:
			①默认不会导入任何模块
			②解决方案:②.1 在__init__.py文件中,再次导入需要的模块(该模块需要指定一个绝对路径,例如加上包名)
					 ②.2 应该以from ... import ... 的形式导入(包>模块>模块资源),导入模块资源时也可以是多个。
					 注意导入顺序:从from到import的顺序应该是包>模块>模块资源这样从大到小的顺序
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值