目录
模块
Python应用程序是由一系列模块组成的,每个PY文件就是一个模块,每个模块也是一个独立的命名空间。因此,允许在不同的模块中定义相同的变量名而不会发生冲突。模块的概念类似于C语言中的lib库。如果需要使用模块中的函数或其他对象,必须导入该模块才可以使用。系统默认的模块不需要导入。
使用模块的优点有:首先,提高了代码的可维护性;其次,提高了代码的可重用性,模块可以被其他模块引用。Python提供了很多内置模块和第三方模块;最后,可以避免函数名和变量名冲突,即允许在不同模块中定义同名的对象。
为了避免模块名冲突,Python引入了按目录来组织模块的方法,称为包(package)。
1.1模块的创建
在文本编辑器中输入Python代码,并以.py作为扩展名进行保存的文件,都认为是Python的一个模块。本书之前所有的任务程序都是一个Python模块。
注意:
- 对于那些可重用的函数,可以搜集起来,放到一个模块中。建议模块名使用短名字且都是小写字母。文件名中不包含点(.),且扩展名是.py;
- 一个模块顶层定义的变量会自动变成该模块的属性。可以通过模块名.变量名来访问模块的属性;
- 模块应放在要导入的程序所在的文件夹下,或放到sys.path列出的某个文件夹中;
- 如果导入和要导入的模块中存在同名的__version__,将发生名字冲突;
- 模块除了函数和属性定义,还可以包括可执行的代码。这些代码通常用来初始化该模块,且仅在该模块第一次导入时才会执行;
- 每个模块都有一个__name__属性,当其值是__main__时,表明该模块自身在运行,否则将被引入;
- 如果想在模块被引入时模块中的某一程序块不执行,可以用__name__属性来使程序块仅在模块自身运行时执行。
模块导入和执行程序示例:
#模块名称为ssss.py,存放路径为E:/PycharmProjects/PythonTest
#打印当前模块的__name__变量值,只要模块第一次加载,都会执行
#__name__变量是全局变量,用来标识模块名称
print(__name__)
def func(a,b): #定义一个幂函数
return a**b
#判断是否是模块自身在运行
#通过这个方式,可以使模块既可以当作顶层文件执行,也可以当作lib库供其他模块使用
if __name__=='__main__':
#如果是模块自身在运行,执行如下代码
import sys #导入包sys
#在模块执行时,可以在文件名之后跟用空格分隔的参数
#这些参数存放在列表对象sys.argv中,可以在程序中按如下方式访问
#第一个参数值是文件路径及文件名
print('sys.argv[0]={}'.format(sys.argv[0]))
#后面是用逗号分隔的参数,本例调用方式为
#python ssss.py 5 2
print('sys.argv[1]={},sys.argv[2]={}'.format(sys.argv[1],sys.argv[2]))
#把文件名后跟的两个参数由字符串转换为整型
a=int(sys.argv[3])
b=int(sys.argv[4])
print(func(a,b)) #输出函数调用结果
#如果不是模块自身在运行,而是被导入的,执行如下代码
else:
print('this is main of module ssss.py')
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/ssss.py python ssss.py 5 2
__main__
sys.argv[0]=E:/PycharmProjects/PythonTest/ssss.py
sys.argv[1]=python,sys.argv[2]=ssss.py
25
Process finished with exit code 0
导入示例模块的代码如下:
#模块名称为muModu.py,存放路径为E:/PycharmProjects/PythonTest
#导入之前定义的模块
import ssss
#判断是否是模块自身在运行
if __name__=='__main__':
#如果模块是自身在运行,执行如下代码
print('this is main of module "muModu.py"')
print('hello')
else:
#如果不是模块自身在运行,而是被导入的,执行如下代码
print('this is main of module ssss.py')
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/muModu.py
ssss
this is main of module ssss.py
this is main of module "muModu.py"
hello
Process finished with exit code 0
1.2导入模块
通常,模块为一个文件,可以导入后使用。可以作为模块的文件类型有.py,.pyo、.pyc、.pyd、.so、.dll等。
导入模块是一个相对耗时的操作,Python使用了一些技巧来加速这个过程。
一个办法是创建后缀为.pyc的字节编译文件,用于将程序转换为中间格式,且该字节编译文件是平台无关的。因为导入模块的部分操作已经预先完成,所以将加快导入速度。
Python中有3种导入模块的方法,下面逐一介绍。
1. import语句导入
语法格式: import 模块名[,模块名1,…]
功能:导入模块后,就可以引用其任何公共的函数、类或属性
注意:
- 用这种方式导入的模块,是在当前的命名空间中建立了一个该模块的引用。这种引用需使用全称。即在访问导入模块中的函数或属性时,必须加上模块的名字,如模块名.函数名;
- 可以用import语句导入多个模块。import导入模块要放在程序头部。最好按照下述顺序:Python标准库模块、Python第三方模块、自定义模块;
- 模块导入时,可以使用as关键字来改变模块的引用对象名字;
- 多次导入一个模块不会多次执行该模块导入操作,只会执行一次。
模块导入示例程序:
#模块1,名称为modu1.py,存放路径为E:/PycharmProjects/PythonTest
#data,var1是模块属性
data=[1,2,3]
var1=25
def isEven(num): #定义函数,判断一个数是否是偶数
if num%2==0:
return True
else:
return False
def isPlalindrome(num): #定义函数,判断一个数是否是回文数
return str(num)==str(num)[::-1] #[::-1]表示取从后向前的元素
#模块1的输出
print('模块modu1中的输出:var1=',var1)
print('模块modu1中的输出:isEven(5)=',isEven(5))
#模块2,名称为modu2.py,存放路径为E:/PycharmProjects/PythonTest
#data、str1是模块属性
data=('a','b','c','d')
def numberOfWords(sentence): #定义函数,判断字符串中单词的个数
return len(sentence.split(' '))
def strReverse(zfStr): #定义函数,对字符串逆置
li=list(zfStr)
li.reverse() #对列表逆置
return ''.join(li) #join()函数把列表转为字符串
#模块2的输出
str1='the standard packaging tools are all designed to be used from the command line.'
print('模块modu2中的输出:str1中的单词个数=',numberOfWords(str1))
#模块3,名称为sample5_17.py,存放路径为E:/PycharmProjects/PythonTest
#同时导入两个模块
import modu1,modu2
#第一次导入模块后,首先执行模块1和模块2的代码
#使用全称调用模块中的属性或函数,可以避免两个模块中的全名属性冲突
print('模块sample5_17中输出模块1的属性data:',modu1.data)
print('模块sample5_17中输出模块2的属性data:',modu2.data)
print('模块sample5_17中的输出:var1=',modu1.var1+15)
print('模块sample5_17中的输出:isEven(28)=',modu1.isEven(28))
print('模块sample5_17中的输出:isPlalindrome(12521)=',modu1.isPlalindrome(12521))
#定义与导入模块中同名的对象时,使用本模块中定义的对象
str1='it`s also possible to specify an exact or minimum version directly on the command line'
str2='information'
print('模块sample5_17中的输出:str1中的单词个数=',modu2.numberOfWords(str1))
print('模块sample5_17中的输出:str2翻转=',modu2.strReverse(str2))
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/sample5_17.py
模块modu1中的输出:var1= 25
模块modu1中的输出:isEven(5)= False
模块modu2中的输出:str1中的单词个数= 14
模块sample5_17中输出模块1的属性data: [1, 2, 3]
模块sample5_17中输出模块2的属性data: ('a', 'b', 'c', 'd')
模块sample5_17中的输出:var1= 40
模块sample5_17中的输出:isEven(28)= True
模块sample5_17中的输出:isPlalindrome(12521)= True
模块sample5_17中的输出:str1中的单词个数= 15
模块sample5_17中的输出:str2翻转= noitamrofni
Process finished with exit code 0
2. from-import语句导入
语法格式: from 模块名 import *|对象名[,对象名,…]
功能:导入指定函数和模块变量。如果在import之后使用*,则任何只要不是以“__”开始的对象都会被导入。
注意:
- 这种导入方式和第一种的区别是所导入的对象直接导入到本地命名空间,因此在访问这些对象时不需要加模块名;
- from-import语句常用于有选择地导入某些属性和函数;
- 如果导入模块中的属性或函数与要导入的模块有命名冲突,必须使用import模块名语句来避免冲突;
- 尽量少用from 模块名 import *,因为较难判定某个特殊的函数或属性的来源,且不利于程序调试和重构。
模块导入示例程序:
#使用from-import语句导入模块
#导入modu1中的部分函数和属性
from modu1 import isEven,data
#导入modu2中的所有对象
from modu2 import *
#导入math模块中的sqrt函数
from math import sqrt
#第一次导入模块后,首先执行modu1和modu2的代码
#所有导入的属性和函数都可以直接使用
#导入的两个模块中同名的变量根据导入顺序进行覆盖,以最后一次导入的为准
#下面两条语句实际上输出的都是第二个模块中的data对象
print('模块sample5_18中输出modu1的属性data=',data)
print('模块sample5_18中输出modu2的属性data=',data)
#没有导入变量var1,因此下面的代码有语法错误
#print('模块sample5_18中的输出:var1=',var1+15)
print('模块sample5_18中的输出:isEven(5)=',isEven(5))
#没有导入函数isPlalindrome(),因此下面的代码有语法错误
#print('isPlalindrome(12521)=',isPlalindrome(12521))
#定义与导入模块中同名的对象时,使用本模块中定义的对象
str1='it`s also possible to specify an exact or minimum version directly on the command line'
str2='information'
print('模块sample5_18中的输出:str1中的单词个数=',numberOfWords(str1))
print('模块sample5_18中的输出:str2翻转=',strReverse(str2))
#sqrt()函数可以直接使用
print('模块sample5_18中的输出:245的开方=',sqrt(245))
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/sample5_18.py
模块modu1中的输出:var1= 25
模块modu1中的输出:isEven(5)= False
模块modu2中的输出:str1中的单词个数= 14
模块sample5_18中输出modu1的属性data= ('a', 'b', 'c', 'd')
模块sample5_18中输出modu2的属性data= ('a', 'b', 'c', 'd')
模块sample5_18中的输出:isEven(5)= False
模块sample5_18中的输出:str1中的单词个数= 15
模块sample5_18中的输出:str2翻转= noitamrofni
模块sample5_18中的输出:245的开方= 15.652475842498529
Process finished with exit code 0
3. 内建函数__import__()导入
语法格式: 变量名=__import__('模块名')
注意:
- __import__()函数的参数是一个字符串。这个字符串可能来自配置文件,也可能是某个表达式的计算结果;
- import语句就是调用这个函数进行导入工作的,import sys <==> sys = __import__('sys');
- 通常在动态加载时使用__import__()函数。如果加载某个文件夹下的所有模块,但模块名称经常变化时,利用__import__()函数来动态加载所有模块。最常见的是对插件功能的支持。
模块导入示例程序3:
#通过内置的__import__()函数导入模块
#把导入的模块赋值给引用变量m1,用于区分不同的导入模块
m1=__import__('modu1')
m2=__import__('modu2')
#第一次导入模块后,首先执行模块1和模块2的代码
#通过模块的引用变量名.对象名,使用所导入模块中的属性和函数
print('模块sample5_19中输出modu1的属性data=',m1.data)
#可有效区分两个不同模块中的同名对象
print('模块sample5_19中输出modu2的属性data=',m2.data)
print('模块sample5_19中的输出: var1=',m1.var1+15)
print('模块sample5_19中的输出: isEven(5)=',m1.isEven(5))
print('模块sample5_19中的输出: isPlalindrome(12521)=',m1.isPlalindrome(12521))
str1='it`s also possible to specify an exact or minimum version directly on the command line'
str2='information'
print('模块sample5_19中的输出:str1中的单词个数=',m2.numberOfWords(str1))
print('模块sample5_19中的输出:str2翻转=',m2.strReverse(str2))
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/sample5_18.py
模块modu1中的输出:var1= 25
模块modu1中的输出:isEven(5)= False
模块modu2中的输出:str1中的单词个数= 14
模块sample5_19中输出modu1的属性data= [1, 2, 3]
模块sample5_19中输出modu2的属性data= ('a', 'b', 'c', 'd')
模块sample5_19中的输出: var1= 40
模块sample5_19中的输出: isEven(5)= False
模块sample5_19中的输出: isPlalindrome(12521)= True
模块sample5_19中的输出:str1中的单词个数= 15
模块sample5_19中的输出:str2翻转= noitamrofni
Process finished with exit code 0
4. Python模块搜索路径
Python在导入一个模块时,执行流程如下所示:
- 创建一个初始值为空的模块对象;
- 把该模块对象追加到sys.module对象中;
- 装载模块中的代码,必要时执行编译操作;
- 执行该模块中对应的代码。
当执行装载模块时,需要知道模块所在的位置。PVM的搜索路径如下所述:
- 在当前目录下搜索该模块;
- 在环境变量pythonpath指定的路径表中依次搜索;
- 在Python安装路径中搜索。
对于上述路径搜索顺序,如果前两个搜索路径中存在与标准模块同名的模块,将覆盖标准模块。
事实上,上述搜索路径都包含在变量sys.path中。可以很方便地通过sys.path.append(新路径)这样的方式动态添加新路径到搜索路径表中。当目录较复杂时,也可以通过添加环境变量的方式增加搜索路径。
1.3包
包是一个有层次的文件目录结构。每个模块对应单个文件,而包对应一个目录。使用标准的import和from-import语句可以导入包中的模块。
包目录下的第一个文件是__init__.py,之后是一些模块文件和子目录。加入子目录中也有__init__.py,那么是这个包的子包。
当把一个包作为模块导入时,实际上导入的是__init__.py文件。__init__.py文件中定义了包的属性和方法,也可以是一个空文件,但必须存在。
对具有下述结构的包导入指定模块:
myModu1/
__init__.py
childModul1/
__init__.py
modu1.py
modu2.py
导入其中的模块语句如下:
#导入模块Graphics.Formats.gif,只能以全名访问模块属性
#若模块modul中定义了全局对象S,则访问方式为myModu1.childModu1.modu1.S
import myModu1.childModu1.modu1
#导入模块modul,只能以modul.全局对象名这种方式访问模块属性或函数
#例如,模块modul中定义了全局对象S,则访问方式为modu1.S
from myModu1.childModu1 import modu1
#导入模块modul,并将属性S放入当前命名空间,可以直接访问被导入的属性
#例如,模块modul中定义了全局对象S,则访问方式为print(S)
from myModu1.childModu1.modu1 import S
#只会执行myModul目录下的__init__.py文件,而不会导入任何模块
import myModul
1.4常用的内置模块
Python标准库包含了数百个模块,安装Python时会自动安装。一些常用的标准模块如下:
类别 | 模块名称 | 功能描述 |
字符串 | string | 通用字符串操作 |
re | 正则表达式操作 | |
difflib | 差异计算工具 | |
textwrap | 文本填充 | |
unicodedata | Unicode字符数据库 | |
stringprep | 互联网字符串准备工作 | |
readline | GNU按行读取接口 | |
rlcompleter | GNU按行读取的实现函数 | |
二进制数据 | struct | 将字节解析为打包的二进制数据 |
codecs | 注册表与基类的编解码器 | |
数据类型 | datetime | 基于日期和时间工具 |
calendar | 通用月份函数 | |
collections | 容器数据类型 | |
collections.abc | 容器虚基类 | |
heapq | 堆队列算法 | |
bisect | 数组二分算法 | |
array | 高效数值数组 | |
weakref | 弱引用 | |
types | 内置类型的动态创建与命名 | |
copy | 浅拷贝与深拷贝 | |
pprint | 格式化输出 | |
reprlib | 交替repr()的实现 | |
数学 | numbers | 数值的虚基类 |
math | 数学函数 | |
cmath | 复数的数学函数 | |
decimal | 定点数与浮点数计算 | |
fractions | 有理数 | |
random | 生成伪随机数 | |
函数式编程 | itertools | 为高效循环生成迭代器 |
functools | 可调用对象上的高阶函数与操作 | |
operator | 针对函数的标准操作 | |
文件与目录 | os.path | 通用路径名控制 |
fileinput | 从多输入流中遍历行 | |
stat | 解释stat()的结果 | |
filecmp | 文件与目录的比较函数 | |
tempfile | 生成临时文件与目录 | |
glob | Unix风格路径名格式的扩展 | |
fnmatch | Unix风格路径名格式的比对 | |
linecache | 文本行的随机存储 | |
shutil | 高级文件操作 | |
macpath | Mac OS 9路径控制函数 | |
持久化 | pickle | Python对象序列化 |
copyreg | 注册机对pickle的支持函数 | |
shelve | Python对象持久化 | |
marshal | 内部Python对象序列化 | |
dbm | Unix“数据库”接口 | |
sqlite3 | 针对SQLite数据库的API2.0 | |
压缩 | zlib | 兼容gzip的压缩 |
gzip | 对gzip文件的支持 | |
bz2 | 对bzip2压缩的支持 | |
lzma | 使用LZMA算法的压缩 | |
zipfile | 操作ZIP存档 | |
tarfile | 读写tar存档文件 | |
文件格式化 | csv | 读写csv文件 |
configparser | 配置文件解析器 | |
netrc | netrc文件处理器 | |
xdrlib | XDR数据编码和解码 | |
plistlib | 生成和解析Mac OS X.plist文件 | |
加密 | hashlib | 安全散列与消息摘要 |
hmac | 针对消息认证的键散列 | |
操作系统工具 | os | 多方面的操作系统接口 |
io | 流核心工具 | |
time | 时间的查询与转化 | |
argparser | 命令行选项、参数和子命令的解析器 | |
optparser | 命令行选项解析器 | |
getopt | C风格的命令行选项解析器 | |
logging | Python日志工具 | |
logging.config | 日志配置 | |
logging.handlers | 日志处理器 | |
getpass | 简易密码输入 | |
curses | 字符显示的终端处理 | |
curses.textpad | curses程序的文本输入域 | |
curses.ascll | ASCII字符集工具 | |
curses.panel | curses的控件栈扩展 | |
platform | 访问底层平台认证数据 | |
errno | 标准错误记号 | |
ctypes | Python外部函数库 | |
并发 | threading | 基于线程的并行 |
multiprocessing | 基于进程的并行 | |
concurrent | 并发包 | |
concurrent.futures | 启动并行任务 | |
subprocess | 子进程管理 | |
sched | 事件调度 | |
queue | 同步队列 | |
select | 等待I/O完成 | |
dummy_threading | threading模块的替代(当_thread不可用时) | |
_thread | 底层的线程API(threading基于其上) | |
_dummy_thread | _thread模块的替代(当_thread不可用时) | |
进程间通信 | socket | 底层网络接口 |
ssl | socket对象的TLS/SSL填充器 | |
asyncore | 异步套接字处理器 | |
asynchat | 异步套接字命令/响应处理器 | |
signal | 异步事务信号处理器 | |
mmap | 内存映射文件支持 | |
互联网 | 邮件与MIME处理包 | |
json | JSON编码与解码 | |
mailcap | mailcap文件处理 | |
mailbox | 多种格式控制邮箱 | |
mimetypes | 文件名与MIME类型映射 | |
base64 | RFC3548:Base16、Base32、Base64编码 | |
binhex | binhex4文件编码与解码 | |
binascii | 二进制码与ASCII码间的转化 | |
quopri | MIME quoted-printable数据的编码与解码 | |
uu | uuencode文件的编码与解码 | |
HTML与XML | html | HTML支持 |
html.parser | 简单HTML与XHTML解析器 | |
html.entities | HTML通用实体的定义 | |
xml | XML处理模块 | |
xml.etree.ElementTree | 树形XML元素API | |
xml.dom | XML DOM API | |
xml.dom.minidom | XML DOM最小生成树 | |
xml.dom.pulldom | 构建部分DOM树的支持 | |
xml.sax | SAX2解析的支持 | |
xml.sax.handler | SAX处理器基类 | |
xml.sax.saxutils | SAX工具 | |
xml.sax.xmlreader | SAX解析器接口 | |
xml.parsers.expat | 运用Expat快速解析XML | |
互联网协议与支持 | webbrowser | 简易web浏览器控制器 |
cgi | CGI支持 | |
cgitb | CGI脚本反向追踪管理器 | |
wsgiref | wsgi工具与引用实现 | |
urllib | URL处理模块 | |
urllib.request | 打开URL连接的扩展库 | |
urllib.response | urllib模块的响应类 | |
urllib.parse | 将URL解析成组件 | |
urllib.error | urllib.request引发的异常类 | |
urllib.roborparser | robots.txt的解析器 | |
http | http模块 | |
http.client | http协议客户端 | |
ftplib | ftp协议客户端 | |
poplib | pop协议客户端 | |
imaplib | imap4协议客户端 | |
nntplib | NNTP协议客户端 | |
smtplib | SMTP协议客户端 | |
smtpd | SMTP服务器 | |
telnetlib | telnet客户端 | |
uuid | RFC4122的UUID对象 | |
socketserver | 网络服务器框架 | |
http.server | http服务器 | |
http.cookies | http cookie状态管理器 | |
http.cookiejar | http客户端的cookie处理 | |
xmlrpc | XML-RPC服务器和客户端模块 | |
xmlrpc.client | XML-RPC客户端访问 | |
xmlrpc.server | XML-RPC服务器基础 | |
ipaddress | IPv4/IPv6控制库 | |
多媒体 | audioop | 处理原始音频数据 |
aifc | 读写AIFF和AIFC文件 | |
sunau | 读写sun AU文件 | |
wave | 读写wav文件 | |
chunk | 读取IFF大文件 | |
colorsys | 颜色系统间转化 | |
imghdr | 指定图像类型 | |
sndhdr | 指定声音文件类型 | |
ossaudiodev | 访问兼容OSS的音频设备 | |
国际化 | gettext | 多语言的国际化服务 |
locale | 国际化服务 | |
编程框架 | turtle | turtle图形库 |
cmd | 基于行的命令解释器支持 | |
shlex | 简单词典分析 | |
Tk图形用户接口 | tkinter | Tcl/Tk接口 |
tkinter.ttk | Tk主题控件 | |
tkinter.tix | Tk扩展控件 | |
tkinter.scrolledtext | 滚轴文本控件 | |
开发工具 | pydoc | 文档生成器和在线帮助系统 |
doctest | 交互式Python示例 | |
unittest | 单元测试框架 | |
unittest.mock | 模拟对象库 | |
test | Python回归测试包 | |
test.support | Python测试工具套件 | |
venv | 虚拟环境搭建 | |
调试 | bdb | 调试框架 |
faulthandler | Python反向追踪器 | |
pdb | Python调试器 | |
timeit | 小段代码执行时间测算 | |
trace | Python执行状态追踪 | |
运行时 | sys | 系统相关的参数与函数 |
sysconfig | 访问Python配置信息 | |
builtins | 内置对象 | |
__main__ | 顶层脚本环境 | |
warnings | 警告控制 | |
contextlib | with状态的上下文工具 | |
abc | 虚基类 | |
atexit | 出口处理器 | |
traceback | 打印或读取一条栈的反向追踪 | |
__future__ | 未来状态定义 | |
gc | 垃圾回收接口 | |
inspect | 检查存活的对象 | |
site | 址相关的配置钩子(hook) | |
fpectl | 浮点数异常控制 | |
distutils | 生成和安装Python模块 | |
code | 基类解释器 | |
codeop | 编译Python代码 | |
导入模块 | imp | 访问import模块的内部 |
zipimport | 从zip归档中导入模块 | |
pkgutil | 包扩展工具 | |
modulefinder | 通过脚本查找模块 | |
runpy | 定位并执行Python模块 | |
importlib | import的一种实施 | |
Python语言 | parser | 访问Python解析树 |
ast | 抽象语法树 | |
symtable | 访问编译器符号表 | |
symbol | Python解析树中的常量 | |
token | Python解析树中的常量 | |
keyword | Python关键字测试 | |
tokenize | Python源文件分词 | |
tabnany | 模糊缩进检测 | |
pyclbr | Python类浏览支持 | |
py_compile | 编译Python源文件 | |
compileall | 按字节编译Python库 | |
dis | Python字节码的反汇编器 | |
pickletools | 序列化开发工具 |
1.5第三方模块
Python除了自带的标准库之外,还有很多第三方库供编程者使用。随着Python的发展,一些稳定的第三方库被加入到标准库里。常用的第三方模块如下:
分类 | 库名称 | 用途 |
科学计算 | matplotlib | Python实现的类matlab库,用户绘制数学方面的二维图形 |
SciPy | 基于Python的matlab,用于矩阵、线性代数、拟合与优化、插值、数值积分、稀疏矩阵、图像处理等 | |
NumPy | 数学计算基础库:N维数组、线性代数计算、傅里叶变换等 | |
SymPy | 符号计算 | |
OpenCV | 计算机视觉库 | |
Pandas | 数据分析库:数据导入、整理、处理、分析等 | |
TVTK | 数据的三维可视化 | |
web框架 | Django | 开源web开发框架,鼓励快速开发,并遵循MVC设计 |
ActiveGrid | 企业级的web2.0解决方案 | |
Karrigell | 简单的web框架,自身包含了web服务,py脚本引擎和纯Python的数据库PyDBLite | |
webpy | 一个小巧灵活的web框架,简单但是功能强大 | |
CherryPy | 基于Python的web应用程序开发框架 | |
Pylons | 基于Python的高效和可靠的web开发框架 | |
Zope | 开源的web应用服务器 | |
TurboGears | 基于Python的MVC风格的web应用程序框架 | |
Twisted | 流行的网络编程库,大型web框架 | |
GUI | PyGtk | 基于Python的GUI程序开发GTK+库 |
PyQt | 基于Python的Qt开发库 | |
WxPython | Python下的GUI编程框架,与MFC的架构相似 | |
PyGUI | MVC框架,将Python应用与平台底层的GUI代码隔离 | |
Kivy | 基于OPenGL ES 2,支持多平台,适合游戏开发 | |
其他 | BeautifulSoup | 基于Python的HTML/XML解析器,简单易用 |
PIL | 基于Python的图像处理库,对图形文件的格式支持广泛 | |
MySQLdb | 用于连接MySQL数据库 | |
PyGame | 基于Python的多媒体开发和游戏软件开发模块 | |
Py2exe | 将Python脚本转换为windows上可以独立运行的可执行程序 |
要使用Python第三方库,必须安装后才能使用。常用的安装方法如下:
1.源码安装
可以在github或者pypi上查找源码文件,一般是zip,tar.zip,tar.bz2格式的压缩包。把这些压缩包解压后,进入文件夹,其中有一个setup.py的文件。在命令行方式下输入命令:python setup.py install即可。
2.包管理器pip安装
使用Python的包管理器pip可以很方便地安装第三方模块。推荐使用这种方式来安装。
使用pip安装模块,会搜索源文件,并自动下载安装。另外也可以下载到本地安装。在命令行方式下输入命令:pip install模块名即可。