day 15 - 模块和包
一 定义
1 模块
用来从逻辑上组织python代码(变量,函数,类,逻辑,实现一个功能)
是.py结尾的python文件 ,导入后,可以直接调用其内部函数
模块名就是文件名
2 包
是用来从逻辑上组织模块
实际是一个目录 ,目录下包含.py文件,必须有一个__init__.py文件 ,实质是执行该包下的__init__.py文件
导入系统包,import 包名+模块名
3
普通 Python 模块的搜索路径
1. 在当前模块所在路径中搜索导入模块
2. 在环境变量 PYTHONPATH 指定的路径列表中搜索导入模块
3. 在 sys.path 指定的路径列表中搜索导入模块
二 导入方法
import module_name #导入一个模块,调用时,模块名.方法名
import module1_name,modele2_name #导入多个模块
from module import * #导入module下的所有方法
from module import fun1,fun2,fun3 #导入三个方法 ,调用时直接使用,不需要再加模块名
from module import functionname as module_fun #调用module下的function_name方法,调用时可使用别名 module_fun ,等同于module.functionname.
不同目录时,需要把模块的目录添加到绝对路径下
比如,导入自定义包,在test1下新建py文件test1.py,test2.py想要调用test1包下的test1.py模块中的test方法,如何操作

test1.py代码,定义了test方法 
step1 需要知道test2.py的当前目录
import sys,os,os.path
test2_path = os.path.abspath(__file__) #__file__获取当前文件名称
print(test2_path)
输出:
# test2.py所在的文件目录
D:\test\test2\test2.py
step2 需要知道module1模块在哪个目录下,找到上一级目录test2,再找上包含test1的文件夹名称 (test), 因此需要返回两层目录
os.path.dirname(test2_path)
test_path= os.path.dirname(os.path.dirname(test2_path))
输出:
D:\test
step3 需要将test_path添加到sys.path下(这样调用时,才能找到相对应的文件)
#将D:/test添加到sys.path
os.sys.path.insert(0,test_path)
step4 导入自定义的包+模块,调用test1.py下的 test()函数
from test1.test1 import *
print(test())
# 导入自定义包,test2.py,想要调用test1包下的test1.py模块中的test方法
import sys,os.path
test2_path = os.path.abspath(__file__) #获取当前文件目录
print(test2_path)
#查看test1模块所在的上一级目录
test_path =os.path.dirname(os.path.dirname(test2_path))
print(test_path)
#添加test到绝对路径下
os.sys.path.insert(0,test_path)
print(sys.path)
#test1 是文件夹名称(test1.py模块的上一级目录),导入只能导入包+模块
from test1.test1 import *
print(test())

三 导入本质
import,本质是被执行了模块的代码,赋值给模块变量module,相当于module==all code
from module import fun1, 本质是把module模块的某一部分(fun1),执行了一遍
浙公网安备 33010602011771号