包:包是通过使用‘.模块名’来组织python模块名称空间的方式。具体来讲,包就是一个包含__init__.py(前后都是双下划线)文件的文件夹。

  • 目的:用文件夹将文件/模块组织起来。

注意:

1.python3中,即是包中没有__init__.py也可使用

2.而在python2中,如果没有__init__.py,肯定报错

创建包的目的不是为了运行,而是为了被导入使用。

包的本质依然是模块。

  • 使用时,import导入,导入带点的模块时,点的左边一定是包名。
  • import导入文件时,产生名称空间的名字源于文件,import 包,名称空间同样源于文件(包),__init__.py,导入包的本质就是导入它。

demo:

在这个项目文件夹内新建了一个school文件夹,也就是一个包[外链图片转存失败(img-LD1mEtbM-1564322264364)(C:\Users\ou\Desktop\1564320149935.png)]

models.py

def register_models(engine):    
	print('from models.py',engine)

manage.py

def main():    
    print('from mamnage.py')

test.py(test是与school文件夹同级的文件)

import  school.db.models
school.db.models.register_models('MysSQL')
#from models.py MysSQL
import school
school.cmd.manage.main()
# AttributeError: module 'school' has no attribute 'cmd'
from school.cmd.manage import main
main()
#from mamnage.py 

单独导入包时,不会导入该包中所包含包的所有子模块,但有时候我们就是想导入该包,使其能运行其包含的子模块

对school文件夹里的__init__.py进行修改

from . import cmd

对school文件夹下的cmd文件夹里的__init__.py进行修改

from . import manage  (from.表示被调用)

运行test.py

import school
school.cmd.manage.main()
#from mamnage.py

可以看到,进行如上操作后,只导入school,也能调用cmd里的manage文件。

也可以使用如下操作

对cmd进行操作:

__all__=['manage']

tese.py

from school.cmd import *
manage.main()
#from mamnage.py

__all__=[模块1,模块2,…,模块n]

在school下的api文件夹下调用cmd文件夹下的manage文件

from ..cmd import manage  #用相对路径调用
manage.main()

在school下的api文件夹下调用cmd文件夹下的manage文件

from ..cmd import manage  #用相对路径调用
manage.main()

`

在school下的api文件夹下调用cmd文件夹下的manage文件

from ..cmd import manage  #用相对路径调用
manage.main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值