基础库与工具
日志处理
系统工具
邮件
数据库
打印输出
命令行参数解析
命令行界面库
GUI 工具
算法与设计模式
并行计算、分布式、任务调度
HTTP
HTML/XML
Web 框架
Web Server
网络爬虫
消息队列
远程对象支持
日期与时间处理
Excel
SSH
科学计算与数据处理
文本与自然语言处理
代码与性能测试
性能优化
基础库与工具
- six Python 2 和 3 的兼容库,用于编写 Python2 和 3 兼容的代码
- attrs Attributes Without Boilerplate
- assertpy assert 语句的替代品
- affirm 用于更好的替换 assert 语句
- decorator 简化 decorator 的使用难度而开发的模块
- isort 可自动对 Python 的 import 语句进行排序和分段。可将大量的 import 结构转成非常适合阅读的排版
- interruptingcow 一个 watchdog,用于中断长时间运行的代码,也就是给代码加上 timeout 功能
- retrying 一个用于实现重试机制的库
- tenacity 一个通用的 retry 库,能为任何任务加入重试的功能
- py 一个开发支持工具
- faker 一个假数据生成库
- pipenv Python Development Workflow for Humans,相当于是环境管理和包管理二合一,由 Kenneth Reitz (Requests 的作者 )编写,现在移交给 Python 官方来维护,提供比 pip 体验更好的开发包管理
- bidict 双向查询字典,可以通过 value 查询 key
- tablib 把数据导出为 Excel、JSON、CSV 等格式
- glom 处理嵌套数据结构
- envparse 简单的环境变量解析库
- environs 解析环境变量的库。受 envparse 启发,底层使用 marshmallow 验证并序列化值
- swig Python 调用 C/C++ 代码的工具,支持 C++ 的类继承
- pyperclip 向计算机的剪贴板发送或接收文本
- py-setproctitle 一个可以改变进程名称的库
- hashids 数字 ID 混淆库,可将 ID 转成加密字段再还原
- vimdecrypt Vim 加密文件解码工具
- setproctitle 设置进程名,即改变 ps, top 等工具显示的进程名称
- dulwich Git 的纯 Python 实现
日志处理
- logging 标准库日志系统
- logbook 一个功能完备强大的日志库
- Structlog 是一个先进的日志处理器。他可以和任何现存的日志记录工具相集成,并包装了 Python 标准库。你可以构建定制的记录工具,根据你的需要增加上下文,保证你的日志一致、可读
- sentry 一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题
系统工具
- keyring
- sh 是一个成熟的Python子进程接口,允许你像调用函数一样调用任何程序。超级好用。
- Watchdog 是一个跨平台的Python库和shell工具,可以监视文件系统事件。超级好用,容易上手。
- PyFilesystem 文件系统的抽象层
邮件
- yagmail
- mailer
- imapclient
- imbox
- imap_tools
- outlook
数据库
- MySQL-Python 对 MySQL C 驱动的封装,仅支持 Python2,该项目名称为MySQLdb1
- mysqlclient 基于 MySQLdb1 项目,并添加对 Python3 的支持
- mysql-connector-python MySQL 官方支持的纯 Python 驱动
- PyMySQL MySQL 的一个纯 Python 接口
- Tornado-MySQL 基于 PyMySQL 并添加对 Tornado 的支持
- adb 异步 mysql 库
- SQLAlchemy 提供了 SQL 工具包及对象关系映射(ORM)工具
- Peewee 超级轻量的一个 ORM 框架
- Pony ORM 框架,使用生成器实现查询功能
- pymongo MongoDB 官方支持的驱动程序
- motor 为 Tornado 提供了一个基于回调和 Future 机制的非堵塞的 MongoDB 驱动程序
- redis-py Redis 的 Python 接口程序
- dataset 一个 SQLAlchemy 的包装器,使得不用直接写 SQL 而操作数据库
打印输出
- prettytable 表格形式输出数据
- tabulate 可以仅调用一个函数就能够输出小的、好看的表格
- humanize 将数值、日期等转化为更易读的形式
- colorama 输出着色,跨平台
- termcolor 输出着色
- blessings 输出着色
- hues 输出着色,同时可以用来代替日志模块
- better-exceptions 以更友好的形式展示异常信息
- progressbar 控制台进度条,功能完备
- tqdm 控制台进度条工具,支持命令行直接使用
- icecream 一款专用于 print 调试的工具
命令行参数解析
- Docopt 忘了 optparse 和 argparse 吧,使用 docstring 来构建优雅的、高可读性、复杂(如果你有这个需要)的命令行界面。在我看来这是2013年诞生的最好的库
- Click 用于快速创建命令行工具
- clize 利用装饰器将函数转换成命令行解析器
- python-fire Google 开源的一个可从任何 Python 代码自动生成命令行接口(CLI)的库,是开发和调试非常有用的工具,只需将想要在命令行显示的功能写为函数/模块/类,就可以在命令行模式下调用
- Plumbum 命令行工具包
命令行界面库
- curses 标准库内置模块,是原生的一个封装。Windows 平台不支持,官方推荐了 the Console module 和 UniCurses
- Urwid 一个提供 Event Loop,Widget Classes 的控制台界面库
- Blessings 对 curses 的一个封装,使其更易用,所有函数调用都封装在了 Terminal 类中
GUI 工具
- Tkinter
- PyQt
- wxPython
- PyGame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础上开发,可创建功能丰富的游戏和多媒体程序
- Eel 一个小型库,用于制作简单的类似 Electron 的离线 HTML/JS GUI 应用程序
- Pywebview 类似于 Electron 的库, 使用 Web 技术和 Python 相结合来创建GUI应用程序
算法与设计模式
- https://github.com/nryoung/algorithms 算法和数据结构库
- https://github.com/tylerlaberge/PyPattyrn.git 一个实现了常见设计模式的简单且有效的 Python 库
- https://github.com/faif/python-patterns 设计模式和惯用法收集
- https://github.com/grantjenks/sorted_containers 高效的,纯 Python 实现的 SortedList、SortedDict 和 SortedSet 类型
并行计算、分布式、任务调度
- Celery 一个非常成熟的Python分布式框架,可以在分布式的系统中,异步的执行任务,并提供有效的管理和调度功能。
- SCOOP 提供简单易用的分布式调用接口,使用Future接口来进行并发。
- Dispy 相比起 Celery 和 SCOOP,Dispy 提供更为轻量级的分布式并行服务
- PP (Parallel Python)是另外一个轻量级的 Python 并行服务
- Asyncoro 一个利用 Generator 实现分布式并发的 Python 框架
- schedule 一个简单的作业调度工具
- APScheduler 任务调度模块,一个 Python 定时任务框架
- mpi4py 一个构建在MPI之上的Python库,主要使用Cython编写
- threadpool 一个比较老的线程池库,不太建议使用
- pyee 一个 node.js’s EventEmitter 的 Python 粗略实现
- Blinker 强大的进程内信号库,既支持简单的对象到对象通信,也支持针对多个对象进行组播
HTTP
- Requests 为人类准备的 HTTP,以更 pythonic 的方式处理 HTTP 请求,比 urllib2 好用得多
- builtwith 识别网站所使用技术
- whois 域名公共查询工具:Whois
- robotparser 标准库,解析 robots.txt 文件
- requestium 是 Requests, Selenium 和 Parsel 的结合体,结合了 Chrome 59 以后的 headless 无头特性(代替了 phantomjs)
- fake-useragent 伪造 HTTP 请求头中 User Agent 的值
HTML/XML
- lxml 联合了 libxml2 和 libxslt。如果你要处理 XML 或 HTML,lxml 是最好的选择,真的
- PyQuery 像 JQuery 一样使用
- html5lib
- BeautifulSoup 一个可以从 HTML 或 XML 文件中提取数据的 Python 库
- requests-html HTML 解析库,是对 Requests, PyQuery, lxml 等库的封装
Web 框架
- Django 以快速开发和结构整洁著称的高层框架。这个开源免费的框架完全由 Python 编写并且遵循 MVC 的模型
- Flask 基于 WerkzeugWSGI 工具箱和 jinja 模板,适合开发轻量级的 Web 应用,有很多第三方扩展
- tornado 一个强大的、可扩展的异步非阻塞 Web 服务器,同时也是一个轻量级 Web 框架
- Sanic 一个与 Flask 类似,基于 uvloop 的 web 框架,它能让 Python 更快速
- Quart 与 Flask 相似,而且与 Flask API 兼容,并添加了添加异步、WebSocket和 HTTP 2 支持
- FastAPI 一个高性能 Web 框架,用于构建 API,非常高的性能
- Vibora 异步快速的 HTTP 客户端/服务器框架
- Bottle 是一个快速、简单、轻量的WSGI微型web框架。利用Bottle构建小型站点和API的时间以秒计算。这个框架只有一个py文件,你可以把它放进任何目录
- CherryPy 是HTTP协议的一个封装,这样其他软件可以使用它来处理HTTP协议的细节。它是一个低层的框架,它只提供 RFC 2616 定义的功能。接口非常 Pythonic,让 Python 开发者不会感到突兀
- Pyramid 包含了一些 Python/Perl/Ruby 独有的特性,拥有不依赖平台的 MVC 架构,和最快的启动开发的能力。以执行效率和快速开发的能力著称
- TurboGear 建立在其他框架基础上的框架,把其他框架优秀的部分集成到一起。由于每个框架都有一些部分做得不好,TurboGear试图解决这个问题.它允许你从一个单文件服务开始,逐步扩展为一个全栈服务
- web.py 一款轻量级的 Python web 开发框架,简单、高效
- web2py 一种免费的、开源的 web 开发框架,用于敏捷地开发安全的、数据库驱动的 web 应用
- hug 旨在简化 Python RESET APIs 的开发,其本身并非一个网络框架,构建在 Falcon 的高性能 HTTP 库之上,意味着可以使用任何 wsgi 兼容的服务器(例如 gunicorn)将其部署到生产环境中
- Connexion 一个基于Flask实现的一个框架,它基于以YAML格式描述的API的OpenAPI 2.0规范(以前称为Swagger Spec)自动处理HTTP请求
Web Server
- Gunicorn Green Unicorn,是一个 WSGI 服务器,用来支持 Python 应用,被设计成运行于Nginx之后,轻量级、易于使用、并使用许多UNIX特性
- uWSGI 用来构建全栈式的主机服务,既能当作独立的 web 路由器来运行,也能运行在一个完整 web 服务器(比如Nginx或Apache)之后
- Meinheld 一个高性能的异步 WSGI Web 服务, 利用 greenlet 和 Picoev 实现异步 I/O
网络爬虫
- scrapy 一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据
- mechanize 是对 urllib2 的部分功能的替换,能够更好的模拟浏览器行为
- selenium 一个调用浏览器的 Driver,通过这个库你可以直接调用浏览器完成某些操作。关于其使用,有一个不错的教程:Free Selenium Tutorials
- cola 一个分布式爬虫框架
- pyspider 国人编写的强大的网络爬虫系统并带有强大的WebUI。分布式架构,支持多种数据库后端,支持脚本编辑器,任务监视器,项目管理器以及结果查看器
消息队列
- pika RabbitMQ 的 Python 库
- zmq ZeroMQ 的 Python 库
- kafka-python Apache Kafka 的 Python 库
- boto 亚马逊消息列队服务 Python SDK
远程对象支持
- Dopy
- Fnorb
- ICE
- omniORB
- Pyro
- YAMI
日期与时间处理
- Delorean 用它处理日期和时间非常方便。设置时区,截取到秒、分、小时,甚至使用特定步骤从一个日期进到另一个日期
- Arrow 提供了合理的、友好的方式来创建、控制、格式化、转换 Python 的日期、时间和时间戳
- Pendulum 在标准库的基础之上,提供了一个更简洁,更易于使用的 API
- dateutil 是 datetime 标准库的一个扩展库,几乎支持以所有字符串格式对日期进行通用解析,日期计算灵活,内部数据更新及时
- moment 用于处理日期/时间的 Python 库,设计灵感同样是来源于 moment.js 和 requests ,设计理念源自 Times Python 模块
- when.py 提供对用户非常友好的特性来帮助执行常见的日期和时间操作
- maya 主要为了解决解析网站时间数据的问题
- Chronyk 用于解析手写格式的时间和日期
- delorean 一个很方便的日期时间库,可以让人更简单省心的获取时间,不必受困于时间模块中的各种问题
Excel
- OpenPyXL
- XlsxWriter
- xlutils
SSH
- scp
- paramiko
科学计算与数据处理
- numpy
- pandas
- PyTables 提供了一些用于结构化数组的高级查询功能,而且还能添加列索引以提升查询速度,这跟关系型数据库所提供的表索引功能非常类似。
- h5py 将数据存储为高效且可压缩的HDF5格式
- umexpr 基于 NumPy 的快速数值表达式求值库
- dask 一个并行计算库,能在集群中进行分布式计算,能以一种更方便简洁的方式处理大数据量
- fastcache 用 C 实现的,更快的,兼容 Python2 和 Python3 的缓存模块
- PrettyPandas 用 pandas Style API 来将DataFrames转换成适合展示的表格
- bcolz 列式存储的数据持久化方案,压缩率高而且查询速度快
- odo 在各种数据格式之间高效的迁移数据。这里的数据格式既包括内存中的数据结构,比如:列表、集合、元组、迭代器、numpy中的ndarray、pandas中的DataFrame、dynd中的array,以及上述各类的流式序列。也包括存在于Python程序之外的持久化数据,比如:CSV、JSON、行定界的JSON,以及以上各类的远程版本,HDF5 (标准格式与Pandas格式皆可)、 BColz、 SAS、 SQL 数据库 ( SQLAlchemy支持的皆可)、 Mongo 等
- Blaze 用于处理数据库和分析查询的阵列技术。是下一代的 NumPy。用于处理分布式的各种不同数据源的计算
- joblib 为Python函数提供轻量级管道任务(pipeline job)服务的一系列工具,包括透明磁盘IO缓冲、快速序列化、简单并行化运行、日志服务等,为大数据集的快速可靠处理进行了优化,特别针对numpy数组的处理进行了优化
文本与自然语言处理
- Chardet 字符编码探测器,可以自动检测文本、网页、xml的编码
- fuzzyfinder 10 行代码写的模糊查询
- fuzzywuzzy 字符串模糊匹配工具
- flashtext 快速进行大规模语料库的文本搜索与替换
- python-pinyin 将汉字转为拼音。可以用于汉字注音、排序、检索
- xpinyin 将汉字转换为拼音的函数库
- Pinyin2Hanzi 拼音转汉字,可以作为拼音输入法的转换引擎
- jieba 中文分词组件
- thulac 一个高效的中文词法分析工具包
- SnowNLP 处理中文文本的库
- pkuseg-python 北大开源的领域细分的中文分词工具,简单易用
代码与性能测试
- profile/cProfile 标准库提供的性能分析工具
- line_profile 基于函数的性能分析工具,可测试函数中每一行代码消耗的 CPU 时间
- snakeviz 基于 cProfile 的性能分析工具,可将分析结果图形化展示
- memory_profiler 内存占用分析工具,基于函数,可分析函数中每一行代码的内存占用
- pytest 一个成熟的全功能的 Python 测试框架
- mock 用来创建和管理模拟对象,以完成单元测试,在 Python 3.x 中已被集成到 unittest 标准库
- Fudge 是一个类似于 Java 中的 JMock 的纯 python 的 mock 测试模块,主要功能就是可以伪造对象,替换代码中真实的对象,来完成测试
- httmock 基于 Mock 库,更方便于用 requests 的方式来返回接口的值
- HTTPretty HTTP 请求的 mock 工具
- vcrpy 自动 mock HTTP 交互
- HTMLTestRunner 是 Python 标准库 unittest 单元测试框架的一个扩展,用来生成 HTML 测试报告
- Locust 是一个 Python 的性能测试工具,可以通过写 Python 脚本的方式来对 web 接口进行负载测试
性能优化
- numba 使用 Just-in-Time(JIT) 即时编译器的方式加速代码,其 Python 源码通过 LLVMPy 生成 JIT 后的 so文件来加速
- cython 是 Python 的 C 语言扩展。准确说 Cython 是单独的一门语言,专门用来写在 Python 里面 import 用的扩展库。实际上 Cython 的语法基本上跟 Python 一致,而 Cython 有专门的编译器:先将 Cython 代码转变成 C(自动加入了一大堆的 C-Python API),然后使用 C 编译器编译出最终的 Python 可调用的模块。不过 Cython 的缺点是,你并不能真正编写 Python 代码
- pypy 使用 Python 实现的解释器,它使用了 Just-in-Time(JIT) 即时编译器,即动态编译器,与静态编译器(如gcc,java等)不同,它是利用程序运行的过程的数据进行优化
- Pyston 是一款 Dropbox 推出的新的基于 JIT 的 Python 实现,使用 LLVM 编译器实现代码解析与转换