python的包

一、介绍

包就是一个包含了__init__.py文件的文件夹。包只是模块的一种形式而已,包即模块。
​​
在这里插入图片描述

二、包的导入

1.关于包相关的导入语句也分为import和from … import …两种。但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:

凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如demo01.demo02.demo03,但都必须遵循这个原则。

2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

3.对比import demo和from demo import name的应用场景:如果我们想直接使用name那必须使用后者。

1.import导入

格式:import 包名.模块名
使用方法:包名.模块名.变量名
在package\model01中有一个test1.py模块
而这个模块中有一个lalala()函数,下面是调用这个模块和这个模块内函数的代码

import package.model01.test1
package.model01.test1.lalala()

2. from … import … 导入

格式如下:

  1. from 包名.模块名… import 变量名
    使用方式: 例如 变量名() 或者print(变量名)
from package.model01.test1 import lalala
lalala()
  1. from 包名.模块名… import 变量名1,变量名2,…
    使用方式: 例如 变量名1() 或者print(变量名2)

  2. from 包名 import 模块名
    使用方式:模块名.变量名() 或者 print(模块名.变量名)

from package.model01 import test1
test1.lalala()
  1. from 包名 import 模块名,模块名1…
    使用方式:模块名.变量名() 或者 print(模块名1.变量名)

注意:from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

3. __init __.py文件

不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

4. from 包.模块 import *

此处是想从包one中导入所有,实际上该语句只会导入包下__init__.py文件中定义的名字,我们可以在这个文件中定义__all__:

from package.model01 import *
test1.lalala()
print(test1.name)

如果在model01这个包中的__init__.py文件中,添加__all__=[‘test1’],则上面的代码可以使用

__all__=['test1']

包的相对和绝对导入

绝对导入:以最顶级包作为起始
相对导入:用.或者…的方式最为起始(只能在一个包中使用,不能用于不同目录内)
1、绝对导入
在这里插入图片描述

2、相对导入
在这里插入图片描述

相对路径运行注意事项!!!
在没有明确指定包结构的情况下,Python 是根据 name 来决定一个模块在包中的结构的,如果是 main 则它本身是顶层模块,没有包结构。

如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块。如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。

在这里插入图片描述

四、import 导入自定义包的子模块

特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from… import …的绝对或者相对导入。

在这里插入图片描述

不会报错因为sys.path中已经添加了model03包的路径。Import会从sys.path中依次搜索路径。

五、包的单独导入

单独导入包名称时不会导入包中所有包含的所有子模块。
from 包.包…import 模块或者import 包.包…模块
之前介绍的这几种导入方法,都是需要导入到模块这一层。
下面就介绍一下如果导入到包的那一层,要怎么导入里面的模块及使用
在这里插入图片描述

解决办法:需要从导入的包的__init__.py文件中进行操作
在这里插入图片描述

在这个__init__.py文件中写入:

from . import test1
from . import test2

由于之前已经导入了package包中的model05包,现在在model05包中的__init__文件中添加model05包的test1模块和test2模块

在这里插入图片描述

注意!!!运行的文件(package.py)和from引用的包要是平级,不能是package下面的package.py文件!具体是为什么,作者也还没弄清楚

包的安装和发布

1、在包的同级的目录创建setup.py

输入:

from distutils.core import setup
setup(
    name='test',
    version='1.0.0',
    description='This is first package of me',
    author='lee',
    author_email='你的邮箱账号',
    py_modules=['test1.test01'],
)

在这里插入图片描述

2、在命令行运行python setup.py build

在这里插入图片描述

3、生成发布的压缩包,运行Python setup.py sdist

在这里插入图片描述

4、把生成的压缩包解压

在这里插入图片描述

5、安装包

在这里插入图片描述
在这里插入图片描述

安的卸载

直接找到对应的位置删除即可
在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值