加载中...

导入模块or包

import 导入模块或包

# 文件就是一个模块,文件夹就是一个包
# 文件夹里面可以有很多文件,就相当于包中有好多的模块.

import 模块或者包(包是文件夹,模块是文件)
模块不会被重复导入,引入一次终生受益
'''
调用的时候:
	模块.变量
	模块.函数
	模块.类
'''

# import.引入并起别名 , as 后面写这个模块的别名
别名.变量
别名.函数
别名.类

# import导模块的时候,会从sys.path提供的路径下去找,找不到就报错
# import sys
# print(sys.path)

导入任意路径下的任意模块

# 2.导入任意模路径下的任意模块
"""
默认导入当脚本文件同级目录下的模块等..
系统执行流程:首先看一下sys.path里面有没有想要导入的这个模块路径,
如果有,默认导入,如果没有,需要手动追加
"""
import sys
print(sys.path)
"""
[
'D:\\python32_gx\\day19\\import_bao', 
'D:\\python_lianxi', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 
'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages'
]

[
'/mnt/hgfs/python32_gx/day19/import_bao', 
'/home/wangwen/pylianxi', 
'/usr/lib/python36.zip', 
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', 
'/usr/local/lib/python3.6/dist-packages', 
'/usr/lib/python3/dist-packages'
]
"""

"""
sys.path.append(r"D:\python32_gx\day14")
import mymodule2
print(mymodule2.bird)
"""

from .. import .. 从哪里导入什么什么东西

'''
调用的时候:
	直接使用这个变量
	直接使用这个函数
	直接使用这个类
'''


# 导入单个成员
from mymodule import dog
print(dog)

# 导入多个成员
from mymodule import jump,lookdoor
jump()
lookdoor()


# 设置引入成员的别名 as
from mymodule import cat as c , lookdoor as ld
print(c)
ld()

# 导入所有成员 *带有所有
from mymodule import *
print(dog)
print(cat)

# 设置*号导入的范围
"""
	文件下
	# 可以手动指定*的引入范围 __all__
	__all__ = ["cat"]
"""


from mymodule import *
print(dog) #  error 被设置了范围
print(cat)



name的使用

#返回模块名字的魔术属性 __name__
    如果当前文件是直接运行的,返回"__main__"字符串
    如果当前文件是间接导入的,返回当前文件名(模块名)
    
# res = __name__
# print(res,type(res)) return str

直接引入包中的成员

# 如果想把包当成模块用,在创建一个__init__.py中进行定义
# 当引入一个包的时候,当前包下的__init__文件自动执行.
"""
	包中的模块__init__
	实现引入包时候自动引入模块
	使得包形成模块化
"""

import导入某个包下某个模块

# 1.import引入包的语法
# import package1
# 导入包的属性
# print(package1.ceshi1)

# 导入包下的某个模块
# 方法一
# import package1.mywork
# package1.mywork.myjoin()

# 方法二 as 起别名
# import package1.mywork as pm
# pm.myjoin()

# 方法三 把要引入的模块放到初始化文件当中进行引入,简化操作
# import package1
"""os.path.getsize()"""
# package1.mywork.mygetsize()


# 2.from .. import .. 引入包中具体的成员的语法
# 引入包中的属性
# from package1 import ceshi2
# print(ceshi2)

# 可以指定*号的范围 用__all__
# from package1 import *
# print(ceshi2) error
# print(ceshi3)

# 可以用as起别名
# from package1 import ceshi2 as c2,ceshi1 as c1
# print(c1)
# print(c2)

# 引入包中的模块
# from package1 import mywork
# mywork.myjoin()

单入口模式

"""使用相对路径进行导入"""
import package2.pkg1.pkg1_m2 as ppp2
# print(package2.pkg1.pkg1_m2.ceshi100)
print(ppp2.ceshi100)


"""
   package2.pkg1.pkg1_m2文件下
"""

ceshi100 = "ceshi100"
ceshi101 = "ceshi101"

# 相对于当前路径找pkg1_m1模块
from . import pkg1_m1
print(pkg1_m1.ceshi103)

# 相对于当前路径pkg1_m1模块中引入ceshi104成员
from .pkg1_m1 import ceshi104
print(ceshi104)

# 找上一级中的一个模块
from .. import pkg_module1
print(pkg_module1.ceshi201)

# 找上一级中的一个模块里的一个成员 
from ..pkg_module1 import ceshi202
print(ceshi202)

# 找上一级包中的具体某个模块
from ..pkg2 import pkg2_m2
print(pkg2_m2.ceshi300)

# 找上一级包中的具体某个模块里的具体的某个成员
from ..pkg2.pkg2_m2 import ceshi301
print(ceshi301)


"""
相对路径
.  代表当前路径
.. 代表上一级路径

相对路径不能被解释器直接引入,路径找不到.
分模块中的文件不能直接执行,必须通过导入到主入口文件,
间接执行才能找到对应的路径

含有相对路径的分模块不能直接执行,得通过主入口文件间接执行.
"""

"""
# .是无限的
.    当前路径
..   上一级路径
...  上一级的上一级
.... 上一级的上一级的上一级
.....   (这里的点是无限的)

from .......................................... import 模块
"""


posted @ 2024-03-14 19:58  江寒雨  阅读(57)  评论(0)    收藏  举报