第15课 模块与包
一、同一包里面模块的调用
1、模块的概念
1)一般的行数--500到800行
2)一个xxx.py文件就称为一个模块(module)
2、模块化的其他好处
1)以库的形式封装功能,方便给别的代码调用。
a、库其实就是模块和包
b、可以使用自己写的库,python标准库和第三方库
2)避免变量名冲突(包括函数名)
a、如果一个代码文件特别大,变量名就容易发生重复。这时,需要定义不同的变量名和函数名
b、如果采用模块分割代码,每个模块文件代码都不是很多,就可以缓解这个问题
c、每个模块中变量名的作用域只在本模块中
3、模块的使用
1)同一个包里面的模块调用:import 模块名---执行模块
import mathFunction # 导入模块名 # 执行结果 ******begin mathFunction!****** ******end mathFunction!******
2)函数/变量的调用---模块名.函数
import mathFunction # 导入模块名 mathFunction.sumFun(1, 2) # 执行结果 ******begin mathFunction!****** ******end mathFunction!****** 1 + 2 = 3
3)from 模块名 import 函数名/变量
from mathFunction import sumFun sumFun(1, 2) # 执行结果 ******begin mathFunction!****** ******end mathFunction!****** 1 + 2 = 3
4)导入多个函数/变量(这个方法只作为了解)
from mathFunction import sumFun, VERSION, difFun sumFun(1, 2) print(VERSION) difFun(9, 3) # 执行结果 ******begin mathFunction!****** ******end mathFunction!****** 1 + 2 = 3 1.0 9 - 3 = 6
5)全部导入:import 模块名 == from 模块 import *
from mathFunction import * sumFun(58, 69) difFun(108, 36) # 执行结果 ******begin mathFunction!****** ******end mathFunction!****** 58 + 69 = 127 108 - 36 = 72
6)导入多个模块:import module1, module2 或者如下:
import 模块1
import 模块2
from mathFunction import sumFun import lib1 sumFun(12, 13) # 执行结果 ******begin mathFunction!****** ******end mathFunction!****** ******lib1******* 12 + 13 = 25
4、导入函数或者变量取别名:from lib2 import sumFunc as blibF
1)as---取别名 好处:避免冲突、长名字缩短
from lib2 import sumFun as blibF from mathFunction import sumFun as mathF blibF(2, 5) mathF(3, 8) # 执行结果 ******lib2_begin****** ******end****** ******begin mathFunction!****** ******end mathFunction!****** 2 + 5 + 5 = 12 3 + 8 = 11
二、不同包里面模块的调用
1、把许多模块按照功能放到不同的目录中来组织模块,这些存放模块文件的目录称之为包(package)。
2、import 包名.模块名
3、只要去导入这个包,对应的__init__.py会被执行
import sys sys.path.append('D:\work\HelloWorld\songqin\python') # 一定要添加环境变量 import newP.newPTest newP.newPTest.newP() # 执行结果 I am newPtest.__init__.py *********newPTest********* newPFun!
4、包里面包含子包的导入方法
import sys sys.path.append('D:\work\HelloWorld\songqin\python') import newP.sonP.sonPTest newP.sonP.sonPTest.sonP() # 执行结果 I am newPtest.__init__.py ---sonPTest--- HelloPython!
对于比较长的导包,使用别名,更方便。
import sys sys.path.append('D:\work\HelloWorld\songqin\python') import newP.sonP.sonPTest as newPp # 对于比较长的导包,最好用别名 newPp.sonP() # 执行结果 I am newPtest.__init__.py ---sonPTest--- HelloPython!
三、联合使用
1、标准库:python安装包里面提供的功能模块和包。主要包括:
1)内置类型和函数。比如len()、int()、open()等,可以直接使用,不用import。
2)功能模块:包含程序设计所需的常用的功能;需要用import导入它们就可以使用
import time print(time.strftime('%Y_%m_%d %H:%M:%S')) # 获取系统当前时间 # 执行结果 2018_12_09 23:49:25
2、模块的搜索规则:
1)import sys----sys.path:解释器加载的路径
>>> import sys >>> sys.path ['', 'E:\\software\\python\\Lib\\idlelib', 'E:\\software\\python\\python36.zip', 'E:\\software\\python\\DLLs', 'E:\\software\\python\\lib', 'E:\\software\\python', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32\\lib', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\Pythonwin', 'E:\\software\\python\\lib\\site-packages'] # 'E'前面的空格,意思为当前目录
3、增加模块路径
1)cmd----set PYTHONPATH=F:\;G:\---最终到sys.path里面
>>> import sys >>> sys.path ['', 'E:\\software\\python\\python36.zip', 'E:\\software\\python\\DLLs', 'E:\\software\\python\\lib', 'E:\\software\\python', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32\\lib', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\Pythonwin', 'E:\\software\\python\\lib\\site-packages'] >>> ^Z C:\Users\62588>set PYTHONPATH=F:\ C:\Users\62588>python Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', 'F:\\', 'E:\\software\\python\\python36.zip', 'E:\\software\\python\\DLLs', 'E:\\software\\python\\lib', 'E:\\software\\python', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32\\lib', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\Pythonwin', 'E:\\software\\python\\lib\\site-packages'] # 原来环境变量只有E盘,后来通过set PYTHONPATH=F:\,添加F盘
2)sys.path.append('路径')-----临时增加
import sys print(sys.path) #执行结果 ['D:\\software\\HelloWorld\\songqin\\python\\lesson18 模块与包_使用库', 'D:\\software\\HelloWorld', 'E:\\software\\python\\python36.zip', 'E:\\software\\python\\DLLs', 'E:\\software\\python\\lib', 'E:\\software\\python', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32\\lib', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\Pythonwin', 'E:\\software\\python\\lib\\site-packages', 'D:\\software\\pycharm\\helpers\\pycharm_matplotlib_backend']
添加环境变量
sys.path.append('E:\\') # 这里写两个\,是为了防止第一个\被转义 print(sys.path) #执行结果,尾部添加了E盘 ['D:\\software\\HelloWorld\\songqin\\python\\lesson18 模块与包_使用库', 'D:\\software\\HelloWorld', 'E:\\software\\python\\python36.zip', 'E:\\software\\python\\DLLs', 'E:\\software\\python\\lib', 'E:\\software\\python', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\win32\\lib', 'C:\\Users\\62588\\AppData\\Roaming\\Python\\Python36\\site-packages\\Pythonwin', 'E:\\software\\python\\lib\\site-packages', 'D:\\software\\pycharm\\helpers\\pycharm_matplotlib_backend', 'E:\\']
3)pip下载第三方库---lib或者lib/site-package
4)pip安装源--默认国外 ,可以修改为国内的安装源,比如豆瓣。
5)卸载---pip uninstall selenium
6)升级--举例:升级pip---pip install upgrade pip或者 pip install -u pip
7)升级指定的版本:pip install SomePackage == 1.0.4 ; pip install SomePackage >= 1.0.4