python-包

一.包的概念以及相关

1.包的概念

包就是文件夹,他用于存放文件也就是模块。包中也可以存放包

包就是一个包含了__init__.py文件的文件夹。

包只是模块的一种形式而已,包即模块。

2.包的作用

在我们的项目中,可能会有太多的模块

但是我们不能把所有的模块这样放在这里,这样项目会乱七八糟。

我们可以将所有相同类型的模块放在一个文件夹中,这个文件夹就叫做包

二.包的结构

包的基本结构:

三.包的导入

1.包的导入注意事项

1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如demo01.demo02.demo03,但都必须遵循这个原则。

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

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

我们先创造一个包和包中的模块,方便下面操作。

在demon01之外,我们在创造一个py文件,用来测试这些包

2.import导入

我们在导入包时,尽量写入完整的路径

显示出来了,如果我们用import,就必须把import后面的所有路径都写完整。

3.from...import....导入

从......导入.......

这种导入有很多形式。

1.from 包名.模块名... import 变量名

使用方式: 例如 变量名() 或者print(变量名)

 

2.from 包名.模块名... import 变量名1,变量名2,...

使用方式: 例如 变量名1() 或者print(变量名2)

 

3.from 包名 import 模块名

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

 

4.from 包名 import 模块名,模块名1...

使用方式:模块名.变量名() 或者 print(模块名1.变量名)

5.关于__init__.py文件

我们在创建demon1的时候就自带了。它的作用是,只要我们引用demon1中的任意模块,它都会优先运行

(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

_

我们来往这里面添加点内容,让我们在调用demon01_01的时候,自动调用demon01_02

我们在__init__.py中添加

然后运行之前我们运行的包.

得到结果:

 

四.关于包的相对导入和绝对导入

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

绝对导入:以base作为起始

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

(1)绝对导入

测试:

(2)相对导入

测试:

相对路径运行注意事项:

在没有明确指定包结构的情况下,Python 是根据 __name__ 来决定一个模块在包中的结构的,如果是 __main__ 则它本身是顶层模块,没有包结构,如果是base.demo01.demo02 结构,那么顶层模块是 base

如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块

如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。

五.导入自定义模块

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

1.直接运行demo03_test02模块

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

2.在其他地方导入demo03_test02.py进行使用

因为此时的sys.path中只有demo01-包.py的路径 .../day05-包,import demo03_test01 只能从/day05-包下查找 demo03_test01模块。找不到因此报错。

解决import 导入包时的报错问题

我们可以在sys.path中添加import搜索的路径。

 

六.包的安装和发布

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

from distutils.core import setup
setup(name='xt_zsh',
      version='1.1,3',
      description='描述:这是我的第一个包',
      author='zsh',
      author_email='123@163.com',
      py_modules=['test1', 'test2'],
)

2.在命令行 运行 python setup.py build (可以不执行 )  

构建模块   

3.生成发布的压缩包 运行 python setup.py sdist

4.生成发布的压缩包 运行 python setup.py sdist

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值