哪些 Python 库让你相见恨晚?

https://www.zhihu.com/question/24590883

173 个回答

Awesome Python中文版来啦!

本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿。未经许可,禁止转载!
英文出处:github.com。欢迎加入翻译组。



原文链接: Python 资源大全

1200+收藏,600+赞,别只顾着自己私藏呀朋友们

----------------

这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护。内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。

伯乐在线已在 GitHub 上发起「Python 资源大全中文版」的整理。欢迎扩散、欢迎加入。

GitHub - jobbole/awesome-python-cn: Python资源大全中文版

环境管理

管理 Python 版本和环境的工具

  • p – 非常简单的交互式 python 版本管理工具。
  • pyenv – 简单的 Python 版本管理工具。
  • Vex – 可以在虚拟环境中执行命令。
  • virtualenv – 创建独立 Python 环境的工具。
  • virtualenvwrapper- virtualenv 的一组扩展。
包管理

管理包和依赖的工具。

  • pip – Python 包和依赖关系管理工具。
  • pip-tools – 保证 Python 包依赖关系更新的一组工具。
  • conda – 跨平台,Python 二进制包管理工具。
  • Curdling – 管理 Python 包的命令行工具。
  • wheel – Python 分发的新标准,意在取代 eggs。
包仓库

本地 PyPI 仓库服务和代理。

  • warehouse – 下一代 PyPI。
    • Warehousebandersnatch – PyPA 提供的 PyPI 镜像工具。
  • devpi – PyPI 服务和打包/测试/分发工具。
  • localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。
分发

打包为可执行文件以便分发。

  • PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。
  • dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。
  • Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。
  • py2app – 将 Python 脚本变为独立软件包(Mac OS X)。
  • py2exe – 将 Python 脚本变为独立软件包(Windows)。
  • pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。
构建工具

将源码编译成软件。

  • buildout – 一个构建系统,从多个组件来创建,组装和部署应用。
  • BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。
  • fabricate – 对任何语言自动找到依赖关系的构建工具。
  • PlatformIO – 多平台命令行构建工具。
  • PyBuilder – 纯 Python 实现的持续化构建工具。
  • SCons – 软件构建工具。
交互式解析器

交互式 Python 解析器。

  • IPython – 功能丰富的工具,非常有效的使用交互式 Python。
  • bpython- 界面丰富的 Python 解析器。
  • ptpython – 高级交互式Python解析器, 构建于python-prompt-toolkit 之上。
文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

  • imghdr – (Python 标准库)检测图片类型。
  • mimetypes – (Python 标准库)将文件名映射为 MIME 类型。
  • path.py – 对 os.path 进行封装的模块。
  • pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径操作库。
  • python-magic- 文件类型检测的第三方库 libmagic 的 Python 接口。
  • Unipath- 用面向对象的方式操作文件和目录
  • watchdog – 管理文件系统事件的 API 和 shell 工具
日期和时间

操作日期和时间的类库。

  • arrow- 更好的 Python 日期时间操作类库。
  • Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。
  • dateutil – Python datetime 模块的扩展。
  • delorean- 解决 Python 中有关日期处理的棘手问题的库。
  • moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。
  • PyTime – 一个简单易用的Python模块,用于通过字符串来操作日期/时间。
  • pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。
  • when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间操作。
文本处理

用于解析和操作文本的库。

  • 通用
    • chardet – 字符编码检测器,兼容 Python2 和 Python3。
    • difflib – (Python 标准库)帮助我们进行差异化比较。
    • ftfy – 让Unicode文本更完整更连贯。
    • fuzzywuzzy – 模糊字符串匹配。
    • Levenshtein – 快速计算编辑距离以及字符串的相似度。
    • pangu.py – 在中日韩语字符和数字字母之间添加空格。
    • pyfiglet -figlet 的 Python实现。
    • shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。
    • unidecode – Unicode 文本的 ASCII 转换形式 。
    • uniout – 打印可读的字符,而不是转义的字符串。
    • xpinyin – 一个用于把汉字转换为拼音的库。
  • Slug化
    • awesome-slugify – 一个 Python slug 化库,可以保持 Unicode。
    • python-slugify – Python slug 化库,可以把 unicode 转化为 ASCII。
    • unicode-slugify – 一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。
  • 解析器
    • phonenumbers – 解析,格式化,储存,验证电话号码。
    • PLY – lex 和 yacc 解析工具的 Python 实现。
    • Pygments – 通用语法高亮工具。
    • pyparsing – 生成通用解析器的框架。
    • python-nameparser – 把一个人名分解为几个独立的部分。
    • python-user-agents – 浏览器 user agent 解析器。
    • sqlparse – 一个无验证的 SQL 解析器。
特殊文本格式处理

一些用来解析和操作特殊文本格式的库。

  • 通用
    • tablib – 一个用来处理中表格数据的模块。
  • Office
    • Marmir – 把输入的Python 数据结构转换为电子表单。
    • openpyxl – 一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。
    • python-docx – 读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。
    • unoconv – 在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。
    • XlsxWriter – 一个用于创建 Excel .xlsx 文件的 Python 模块。
    • xlwings – 一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。
    • xlwt / xlrd – 读写 Excel 文件的数据和格式信息。
    • relatorio – 模板化OpenDocument 文件。
  • PDF
    • PDFMiner – 一个用于从PDF文档中抽取信息的工具。
    • PyPDF2 – 一个可以分割,合并和转换 PDF 页面的库。
    • ReportLab – 快速创建富文本 PDF 文档。
  • Markdown
    • Mistune – 快速并且功能齐全的纯 Python 实现的 Markdown 解析器。
    • Python-Markdown – John Gruber’s Markdown 的 Python 版实现。
  • YAML
    • PyYAML – Python 版本的 YAML 解析器。
  • CSV
    • csvkit – 用于转换和操作 CSV 的工具。
  • Archive
    • unp – 一个用来方便解包归档文件的命令行工具。
自然语言处理

用来处理人类语言的库。

  • NLTK – 一个先进的平台,用以构建处理人类语言数据的 Python 程序。
  • jieba – 中文分词工具。
  • langid.py – 独立的语言识别系统。
  • Pattern – Python 网络信息挖掘模块。
  • SnowNLP – 一个用来处理中文文本的库。
  • TextBlob – 为进行普通自然语言处理任务提供一致的 API。
  • TextGrocery – 一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。
文档

用以生成项目文档的库。

  • Sphinx – Python 文档生成器。
    • awesome-sphinxdoc
  • MkDocs – 对 Markdown 友好的文档生成器。
  • pdoc – 一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。
  • Pycco – 文学编程(literate-programming)风格的文档生成器。
配置

用来保存和解析配置的库。

  • config – logging 模块作者写的分级配置模块。
  • ConfigObj – INI 文件解析器,带验证功能。
  • ConfigParser – (Python 标准库) INI 文件解析器。
  • profig – 通过多种格式进行配置,具有数值转换功能。
  • python-decouple – 将设置和代码完全隔离。
命令行工具

用于创建命令行程序的库。

  • 命令行程序开发
    • cement – Python 的命令行程序框架。
    • click – 一个通过组合的方式来创建精美命令行界面的包。
    • cliff – 一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。
    • clint – Python 命令行程序工具。
    • colorama – 跨平台彩色终端文本。
    • docopt – Python 风格的命令行参数解析器。
    • Gooey – 一条命令,将命令行程序变成一个 GUI 程序。
    • python-prompt-toolkit – 一个用于构建强大的交互式命令行程序的库。
  • 生产力工具
    • aws-cli – Amazon Web Services 的通用命令行界面。
    • bashplotlib – 在终端中进行基本绘图。
    • caniusepython3 – 判断是哪个项目妨碍你你移植到 Python 3。
    • cookiecutter – 从 cookiecutters(项目模板)创建项目的一个命令行工具。
    • doitlive – 一个用来在终端中进行现场演示的工具。
    • howdoi – 通过命令行获取即时的编程问题解答。
    • httpie – 一个命令行HTTP 客户端,cURL 的替代品,易用性更好。
    • PathPicker – 从bash输出中选出文件。
    • percol – 向UNIX shell 传统管道概念中加入交互式选择功能。
    • SAWS – 一个加强版的 AWS 命令行。
    • thefuck – 修正你之前的命令行指令。
    • mycli – 一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。
    • pgcli – Postgres 命令行工具,具有自动补全和语法高亮功能。
下载器

用来进行下载的库.

  • s3cmd – 一个用来管理Amazon S3 和 CloudFront 的命令行工具。
  • s4cmd – 超级 S3 命令行工具,性能更加强劲。
  • you-get – 一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。
  • youtube-dl – 一个小巧的命令行程序,用来下载 YouTube 视频。
图像处理

用来操作图像的库.

  • pillow – Pillow 是一个更加易用版的 PIL。
  • hmap – 图像直方图映射。
  • imgSeek – 一个使用视觉相似性搜索一组图片集合的项目。
  • nude.py – 裸体检测。
  • pyBarcode – 不借助 PIL 库在 Python 程序中生成条形码。
  • pygram – 类似 Instagram 的图像滤镜。
  • python-qrcode – 一个纯 Python 实现的二维码生成器。
  • Quads – 基于四叉树的计算机艺术。
  • scikit-image – 一个用于(科学)图像处理的 Python 库。
  • thumbor – 一个小型图像服务,具有剪裁,尺寸重设和翻转功能。
  • wand – MagickWand的Python 绑定。MagickWand 是 ImageMagick的 C API 。
OCR

光学字符识别库。

  • pyocr – Tesseract 和 Cuneiform 的一个封装(wrapper)。
  • pytesseract – Google Tesseract OCR 的另一个封装(wrapper)。
  • python-tesseract – Google Tesseract OCR 的一个包装类。
音频

用来操作音频的库

  • audiolazy -Python 的数字信号处理包。
  • audioread – 交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。
  • beets – 一个音乐库管理工具及 MusicBrainz 标签添加工具
  • dejavu – 音频指纹提取和识别
  • django-elastic-transcoder – Django + Amazon Elastic Transcoder。
  • eyeD3 – 一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。
  • id3reader – 一个用来读取 MP3 元数据的 Python 模块。
  • m3u8 – 一个用来解析 m3u8 文件的模块。
  • mutagen – 一个用来处理音频元数据的 Python 模块。
  • pydub – 通过简单、简洁的高层接口来操作音频文件。
  • pyechonest – Echo Nest API 的 Python 客户端
  • talkbox – 一个用来处理演讲/信号的 Python 库
  • TimeSide – 开源 web 音频处理框架。
  • tinytag – 一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。
  • mingus – 一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。
视频

用来操作视频和GIF的库。

  • moviepy – 一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。
  • scikit-video – SciPy 视频处理常用程序。
地理位置

地理编码地址以及用来处理经纬度的库。

  • GeoDjango – 世界级地理图形 web 框架。
  • GeoIP – MaxMind GeoIP Legacy 数据库的 Python API。
  • geojson – GeoJSON 的 Python 绑定及工具。
  • geopy – Python 地址编码工具箱。
  • pygeoip – 纯 Python GeoIP API。
  • django-countries – 一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。
HTTP

使用HTTP的库。

  • requests – 人性化的HTTP请求库。
  • grequests – requests 库 + gevent ,用于异步 HTTP 请求.
  • httplib2 – 全面的 HTTP 客户端库。
  • treq – 类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。
  • urllib3 – 一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。
数据库

Python实现的数据库。

  • pickleDB – 一个简单,轻量级键值储存数据库。
  • PipelineDB – 流式 SQL 数据库。
  • TinyDB – 一个微型的,面向文档型数据库。
  • ZODB – 一个 Python 原生对象数据库。一个键值和对象图数据库。
数据库驱动

用来连接和操作数据库的库。

  • MySQL – awesome-mysql系列
    • mysql-python – Python 的 MySQL 数据库连接器。
    • mysqlclient – mysql-python 分支,支持 Python 3。
    • oursql – 一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.
    • PyMySQL – 纯 Python MySQL 驱动,兼容 mysql-python。
  • PostgreSQL
    • psycopg2 – Python 中最流行的 PostgreSQL 适配器。
    • queries – psycopg2 库的封装,用来和 PostgreSQL 进行交互。
    • txpostgres – 基于 Twisted 的异步 PostgreSQL 驱动。
  • 其他关系型数据库
    • apsw – 另一个 Python SQLite封装。
    • dataset – 在数据库中存储Python字典 – 可以协同SQLite,MySQL,和 PostgreSQL工作。
    • pymssql- 一个简单的Microsoft SQL Server数据库接口。
  • NoSQL 数据库
    • cassandra-python-driver – Cassandra 的 Python 驱动。
    • HappyBase – 一个为 Apache HBase 设计的,对开发者友好的库。
    • Plyvel – 一个快速且功能丰富的 LevelDB 的 Python 接口。
    • py2neo – Neo4j restful 接口的Python 封装客户端。
    • pycassa – Cassandra 的 Python Thrift 驱动。
    • PyMongo – MongoDB 的官方 Python 客户端。
    • redis-py – Redis 的 Python 客户端。
    • telephus – 基于 Twisted 的 Cassandra 客户端。
    • txRedis – 基于 Twisted 的 Redis 客户端。
ORM

实现对象关系映射或数据映射技术的库。

  • 关系型数据库
    • Django Models – Django 的一部分。
    • SQLAlchemy – Python SQL 工具以及对象关系映射工具。
      • awesome-sqlalchemy系列
    • Peewee – 一个小巧,富有表达力的 ORM。
    • PonyORM – 提供面向生成器的 SQL 接口的 ORM。
    • python-sql – 编写 Python 风格的 SQL 查询。
  • NoSQL 数据库
    • django-mongodb-engine – Django MongoDB 后端。
    • PynamoDB – Amazon DynamoDB 的一个 Python 风格接口。
    • flywheel – Amazon DynamoDB 的对象映射工具。
    • MongoEngine – 一个Python 对象文档映射工具,用于 MongoDB。
    • hot-redis – 为 Redis 提供 Python 丰富的数据类型。
    • redisco – 一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。
  • 其他
    • butterdb – Google Drive 电子表格的 Python ORM。
Web 框架

全栈 web 框架。

  • Django – Python 界最流行的 web 框架。
    • awesome-django系列
  • Flask – 一个 Python 微型框架。
    • https://github.com/humiaozuzu/awesome-flask系列
  • Pyramid – 一个小巧,快速,接地气的开源Python web 框架。
    • awesome-pyramid系列
  • Bottle – 一个快速小巧,轻量级的 WSGI 微型 web 框架。
  • CherryPy – 一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。
  • TurboGears – 一个可以扩展为全栈解决方案的微型框架。
  • web.py – 一个 Python 的 web 框架,既简单,又强大。
  • web2py – 一个全栈 web 框架和平台,专注于简单易用。
  • Tornado – 一个web 框架和异步网络库。
权限

允许或拒绝用户访问数据或功能的库。

  • Carteblanche – Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.
  • django-guardian – Django 1.2+ 实现了单个对象权限。
  • django-rules – 一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。
CMS

内容管理系统

  • django-cms – 一个开源的,企业级 CMS,基于 Django。
  • djedi-cms – 一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。
  • FeinCMS – 基于 Django 构建的最先进的内容管理系统之一。
  • Kotti – 一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。
  • Mezzanine – 一个强大的,持续的,灵活的内容管理平台。
  • Opps – 一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。
  • Plone – 一个构建于开源应用服务器 Zope 之上的 CMS。
  • Quokka – 灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。
  • Wagtail – 一个 Django 内容管理系统。
  • Widgy – 最新的 CMS 框架,基于 Django。
电子商务

用于电子商务以及支付的框架和库。

  • django-oscar – 一个用于 Django 的开源的电子商务框架。
  • django-shop – 一个基于 Django 的店铺系统。
  • Cartridge – 一个基于 Mezzanine 构建的购物车应用。
  • shoop – 一个基于 Django 的开源电子商务平台。
  • alipay – 非官方的 Python 支付宝 API。
  • merchant – 一个可以接收来自多种支付平台支付的 Django 应用。
  • money – 货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.
  • python-currencies – 显示货币格式以及它的数值。
RESTful API

用来开发RESTful APIs的库

  • Django
    • django-rest-framework – 一个强大灵活的工具,用来构建 web API。
    • django-tastypie – 为Django 应用开发API。
    • django-formapi – 为 Django 的表单验证,创建 JSON APIs 。
  • Flask
    • flask-api – 为 flask 开发的,可浏览 Web APIs 。
    • flask-restful – 为 flask 快速创建REST APIs 。
    • flask-restless – 为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。
    • flask-api-utils – 为 Flask 处理 API 表示和验证。
    • eve – REST API 框架,由 Flask, MongoDB 等驱动。
  • Pyramid
    • cornice – 一个Pyramid 的 REST 框架 。
  • 与框架无关的
    • falcon – 一个用来建立云 API 和 web app 后端的噶性能框架。
    • sandman – 为现存的数据库驱动系统自动创建 REST APIs 。
    • restless – 框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。
    • ripozo – 快速创建 REST/HATEOAS/Hypermedia APIs。
验证

实现验证方案的库。

  • OAuth
    • Authomatic – 简单但是强大的框架,身份验证/授权客户端。
    • django-allauth – Django 的验证应用。
    • django-oauth-toolkit – 为 Django 用户准备的 OAuth2。
    • django-oauth2-provider – 为 Django 应用提供 OAuth2 接入。
    • Flask-OAuthlib – OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。
    • OAuthLib – 一个 OAuth 请求-签名逻辑通用、 完整的实现。
    • python-oauth2 – 一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。
    • python-social-auth – 一个设置简单的社会化验证方式。
    • rauth – OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。
    • sanction – 一个超级简单的OAuth2 客户端实现。
  • 其他
    • jose – JavaScript 对象签名和加密草案的实现。
    • PyJWT – JSON Web 令牌草案 01。
    • python-jws – JSON Web 签名草案 02 的实现。
    • python-jwt – 一个用来生成和验证 JSON Web 令牌的模块。
模板引擎

模板生成和词法解析的库和工具。

  • Jinja2 – 一个现代的,对设计师友好的模板引擎。
  • Chameleon – 一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。
  • Genshi – Python 模板工具,用以生成 web 感知的结果。
  • Mako – Python 平台的超高速轻量级模板。
Queue

处理事件以及任务队列的库。

  • celery – 一个异步任务队列/作业队列,基于分布式消息传递。
  • huey – 小型多线程任务队列。
  • mrq – Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。
  • rq – 简单的 Python 作业队列。
  • simpleq – 一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。
搜索

对数据进行索引和执行搜索查询的库和软件。

  • django-haystack – Django 模块化搜索。
  • elasticsearch-py – Elasticsearch 的官方底层 Python 客户端。
  • elasticsearch-dsl-py -Elasticsearch 的官方高级 Python 客户端。
  • solrpy – solr的 Python 客户端。
  • Whoosh – 一个快速的纯 Python 搜索引擎库。
动态消息

用来创建用户活动的库。

  • django-activity-stream – 从你的站点行为中生成通用活动信息流。
  • Stream-Framework – 使用 Cassandra 和 Redis 创建动态消息和通知系统。
资源管理

管理、压缩、缩小网站资源的工具。

  • django-compressor – 将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。
  • django-storages – 一个针对 Django 的自定义存储后端的工具集合。
  • fanstatic – 打包、优化,并且把静态文件依赖作为 Python 的包来提供。
  • File Conveyor – 一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。
  • Flask-Assets – 帮你将 web 资源整合到你的 Flask app 中。
  • jinja-assets-compressor – 一个 Jinja 扩展,用来编译和压缩你的资源。
  • webassets – 为你的静态资源打包、优化和管理生成独一无二的缓存 URL。
缓存

缓存数据的库。

  • Beaker – 一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。
  • django-cache-machine – Django 模型的自动缓存和失效。
  • django-cacheops- 具有自动颗粒化事件驱动失效功能的 ORM。
  • django-viewlet – 渲染模板,同时具有额外的缓存控制功能。
  • dogpile.cache – dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。
  • HermesCache – Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。
  • johnny-cache – django应用缓存框架。
  • pylibmc – libmemcached 接口的 Python 封装。
电子邮件

用来发送和解析电子邮件的库。

  • django-celery-ses – 带有 AWS SES 和 Celery 的 Django email 后端。
  • envelopes – 供人类使用的电子邮件库。
  • flanker – 一个 email 地址和 Mime 解析库。
  • imbox – Python IMAP 库
  • inbox.py – Python SMTP 服务器。
  • inbox – 一个开源电子邮件工具箱。
  • lamson – Python 风格的 SMTP 应用服务器。
  • mailjet – Mailjet API 实现,用来提供批量发送邮件,统计等功能。
  • marrow.mailer – 高性能可扩展邮件分发框架。
  • modoboa – 一个邮件托管和管理平台,具有现代的、简约的 Web UI。
  • pyzmail – 创建,发送和解析电子邮件。
  • Talon – Mailgun 库,用来抽取信息和签名。
国际化

用来进行国际化的库。

  • Babel – 一个Python 的国际化库。
  • Korean – 一个韩语词态库。
URL处理

解析URLs的库

  • furl – 一个让处理 URL 更简单小型 Python 库。
  • purl – 一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。
  • pyshorteners – 一个纯 Python URL 缩短库。
  • shorturl- 生成短小 URL 和类似 bit.ly 短链的Python 实现。
  • webargs – 一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。
HTML处理

处理 HTML和XML的库。

  • BeautifulSoup – 以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。
  • bleach – 一个基于白名单的 HTML 清理和文本链接库。
  • cssutils – 一个 Python 的 CSS 库。
  • html5lib – 一个兼容标准的 HTML 文档和片段解析及序列化库。
  • lxml – 一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。
  • MarkupSafe – 为Python 实现 XML/HTML/XHTML 标记安全字符串。
  • pyquery – 一个解析 HTML 的库,类似 jQuery。
  • untangle – 将XML文档转换为Python对象,使其可以方便的访问。
  • xhtml2pdf – HTML/CSS 转 PDF 工具。
  • xmltodict – 像处理 JSON 一样处理 XML。
网络站点爬取

爬取网络站点的库

  • Scrapy – 一个快速高级的屏幕爬取及网页采集框架。
  • cola – 一个分布式爬虫框架。
  • Demiurge – 基于PyQuery 的爬虫微型框架。
  • feedparser – 通用 feed 解析器。
  • Grab – 站点爬取框架。
  • MechanicalSoup – 用于自动和网络站点交互的 Python 库。
  • portia – Scrapy 可视化爬取。
  • pyspider – 一个强大的爬虫系统。
  • RoboBrowser – 一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。
网页内容提取

用于进行网页内容提取的库。

  • Haul – 一个可以扩展的图像爬取工具。
  • html2text – 将 HTML 转换为 Markdown 格式文本
  • lassie – 人性化的网页内容检索库。
  • micawber -一个小型网页内容提取库,用来从 URLs 提取富内容。
  • newspaper – 使用 Python 进行新闻提取,文章提取以及内容策展。
  • opengraph – 一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。
  • python-goose – HTML内容/文章提取器。
  • python-readability- arc90 公司 readability 工具的 Python 高速端口
  • sanitize – 为杂乱的数据世界带来调理性。
  • sumy – 一个为文本文件和 HTML 页面进行自动摘要的模块。
  • textract – 从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。
表单

进行表单操作的库。

  • Deform – Python HTML 表单生成库,受到了 formish 表单生成库的启发。
  • django-bootstrap3- 集成了 Bootstrap 3 的 Django。
  • django-crispy-forms – 一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don’t repeat yourself) 的方式来创建美观的表单。
  • django-remote-forms- 一个平台独立的 Django 表单序列化工具。
  • WTForms – 一个灵活的表单验证和呈现库。
  • WTForms-JSON- 一个 WTForms 扩展,用来处理 JSON 数据。
数据验证

数据验证库。多用于表单验证。

  • Cerberus – A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition.
  • colander – 一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。
  • kmatch – 一种用于匹配/验证/筛选 Python 字典的语言。
  • schema -一个用于对 Python 数据结构进行验证的库。
  • Schematics – 数据结构验证。
  • valideer – 轻量级可扩展的数据验证和适配库。
  • voluptuous – 一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。
反垃圾技术

帮助你和电子垃圾进行战斗的库。

  • django-simple-captcha – 一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。
  • django-simple-spam-blocker- 一个用于Django的简单的电子垃圾屏蔽工具。
标记

用来进行标记的库。

  • django-taggit – 简单的 Django 标记工具。
管理面板

管理界面库。

  • Ajenti – 一个你的服务器值得拥有的管理面板。
  • django-suit – Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。
  • django-xadmin – Django admin 的一个替代品,具有很多不错的功能。
  • flask-admin – 一个用于 Flask 的简单可扩展的管理界面框架。
  • flower – 一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。
  • Grappelli – Django 管理界面的一个漂亮的皮肤。
  • Wooey – 一个 Django 应用,可以为 Python 脚本创建 web 用户界面。
静态站点生成器

静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。

  • Pelican – 使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。
  • Cactus – 为设计师设计的静态站点生成器。
  • Hyde – 基于 Jinja2 的静态站点生成器。
  • Nikola – 一个静态网站和博客生成器。
  • Tinkerer – Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。
  • Lektor – 一个简单易用的静态 CMS 和博客引擎。
进程

操作系统进程启动及通信库。

  • envoy – 比 Python subprocess 模块更人性化。
  • sarge – 另一 种 subprocess 模块的封装。
  • sh – 一个完备的 subprocess 替代库。
并发和并行

用以进行并发和并行操作的库。

  • multiprocessing – (Python 标准库) 基于进程的“线程”接口。
  • threading – (Python 标准库)更高层的线程接口。
  • eventlet – 支持 WSGI 的异步框架。
  • gevent – 一个基于协程的 Python 网络库,使用greenlet。
  • Tomorrow -用于产生异步代码的神奇的装饰器语法实现。
网络

用于网络编程的库。

  • asyncio – (Python 标准库) 异步 I/O, 事件循环, 协程以及任务。
  • Twisted – 一个事件驱动的网络引擎。
  • pulsar – 事件驱动的并发框架。
  • diesel – 基于Greenlet 的事件 I/O 框架。
  • pyzmq – 一个 ZeroMQ 消息库的 Python 封装。
  • txZMQ – 基于 Twisted 的 ZeroMQ 消息库的 Python 封装。
WebSocket

帮助使用WebSocket的库。

  • AutobahnPython – 给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 asyncio。
  • Crossbar – 开源统一应用路由(Websocket & WAMP for Python on Autobahn).
  • django-socketio – 给 Django 用的 WebSockets。
  • WebSocket-for-Python – 为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。
WSGI 服务器

兼容 WSGI 的 web 服务器

  • gunicorn – Pre-forked, 部分是由 C 语言编写的。
  • uwsgi – uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。
  • bjoern – 异步,非常快速,由 C 语言编写。
  • fapws3 – 异步 (仅对于网络端),由 C 语言编写。
  • meinheld – 异步,部分是由 C 语言编写的。
  • netius – 异步,非常快速。
  • paste – 多线程,稳定,久经考验。
  • rocket – 多线程。
  • waitress – 多线程, 是它驱动着 Pyramid 框架。
  • Werkzeug – 一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。
RPC 服务器

兼容 RPC 的服务器。

  • SimpleJSONRPCServer – 这个库是 JSON-RPC 规范的一个实现。
  • SimpleXMLRPCServer – (Python 标准库) 简单的 XML-RPC 服务器实现,单线程。
  • zeroRPC – zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。
密码学
  • cryptography – 这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。
  • hashids – 在 Python 中实现 hashids 。
  • Paramiko – SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。
  • Passlib – 安全密码存储/哈希库,
  • PyCrypto – Python 密码学工具箱。
  • PyNacl – 网络和密码学(NaCl) 库的 Python 绑定。
图形用户界面

用来创建图形用户界面程序的库。

  • curses – 内建的 ncurses 封装,用来创建终端图形用户界面。
  • enaml – 使用类似 QML 的Declaratic语法来创建美观的用户界面。
  • kivy – 一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。
  • pyglet – 一个Python 的跨平台窗口及多媒体库。
  • PyQt – 跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4 和 Qt v5。
  • PySide – P跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4。
  • Tkinter – Tkinter 是 Python GUI 的一个事实标准库。
  • Toga – 一个 Python 原生的, 操作系统原生的 GUI 工具包。
  • urwid – 一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。
  • wxPython – wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。
  • PyGObject – GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定
  • Flexx – Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。
游戏开发

超赞的游戏开发库。

  • Cocos2d – cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。
  • Panda3D – 由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。
  • Pygame – Pygame 是一组 Python 模块,用来编写游戏。
  • PyOgre – Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。
  • PyOpenGL – OpenGL 的 Python 绑定及其相关 APIs。
  • PySDL2 – SDL2 库的封装,基于 ctypes。
  • RenPy – 一个视觉小说(visual novel)引擎。
日志

用来生成和操作日志的库。

  • logging – (Python 标准库) 为 Python 提供日志功能。
  • logbook – Logging 库的替代品。
  • Eliot – 为复杂的和分布式系统创建日志。
  • Raven – Sentry的 Python 客户端。
  • Sentry – 实时记录和收集日志的服务器。
测试

进行代码库测试和生成测试数据的库。

  • 测试框架
    • unittest – (Python 标准库) 单元测试框架。
    • nose – nose 扩展了 unittest 的功能。
    • contexts – 一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。
    • hypothesis – Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。
    • mamba – Python 的终极测试工具, 拥护BDD。
    • PyAutoGUI – PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。
    • pyshould- Should 风格的断言,基于 PyHamcrest。
    • pytest- 一个成熟的全功能 Python 测试工具。
    • green- 干净,多彩的测试工具。
    • pyvows- BDD 风格的测试工具,受Vows.js的启发。
    • Robot Framework – 一个通用的自动化测试框架。
  • Web 测试
    • Selenium – Selenium WebDriver 的 Python 绑定。
    • locust – 使用 Python 编写的,可扩展的用户加载测试工具。
    • sixpack – 一个和语言无关的 A/B 测试框架。
    • splinter – 开源的 web 应用测试工具。
  • Mock测试
    • mock – (Python 标准库) 一个用于伪造测试的库。
    • doublex – Python 的一个功能强大的 doubles 测试框架。
    • freezegun – 通过伪造日期模块来生成不同的时间。
    • httmock – 针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。
    • httpretty – Python 的 HTTP 请求 mock 工具。
    • responses – 伪造 Python 中的 requests 库的一个通用库。
    • VCR.py – 在你的测试中记录和重放 HTTP 交互。
  • 对象工厂
    • factoryboy – 一个 Python 用的测试固件 (test fixtures) 替代库。
    • mixer – 另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。
    • modelmommy – 为 Django 测试创建随机固件
  • 代码覆盖率
    • coverage – 代码覆盖率测量。
  • 伪数据
    • faker – 一个 Python 库,用来生成伪数据。
    • fake2db – 伪数据库生成器。
    • radar – 生成随机的日期/时间。
  • 错误处理
    • FuckIt.py – FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。
代码分析和Lint工具

进行代码分析,解析和操作代码库的库和工具。

  • 代码分析
    • code2flow – 把你的 Python 和 JavaScript 代码转换为流程图。
    • pycallgraph -这个库可以把你的Python 应用的流程(调用图)进行可视化。
    • pysonar2 – Python 类型推断和检索工具。
  • Lint工具
    • Flake8 – 模块化源码检查工具: pep8, pyflakes 以及 co。
    • Pylint – 一个完全可定制的源码分析器。
    • pylama – Python 和 JavaScript 的代码审查工具。
调试工具

用来进行代码调试的库。

  • 调试器
    • ipdb – IPython 启用的 pdb。
    • pudb – 全屏,基于控制台的 Python 调试器。
    • pyringe – 可以在 Python 进程中附加和注入代码的调试器。
    • wdb – 一个奇异的 web 调试器,通过 WebSockets 工作。
    • winpdb – 一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。
    • django-debug-toolbar – 为 Django 显示各种调试信息。
    • django-devserver – 一个 Django 运行服务器的替代品。
    • flask-debugtoolbar – django-debug-toolbar 的 flask 版。
  • 性能分析器
    • lineprofiler – 逐行性能分析。
    • memoryprofiler – 监控 Python 代码的内存使用。
    • profiling – 一个交互式 Python 性能分析工具。
  • 其他
    • pyelftools – 解析和分析 ELF 文件以及 DWARF 调试信息。
    • python-statsd – statsd 服务器的 Python 客户端。
科学技术和数据分析

用来进行科学计算和数据分析的库。

  • astropy – 一个天文学 Python 库。
  • bcbio-nextgen – 这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。
  • bccb – 生物分析相关代码集合
  • Biopython – Biopython 是一组可以免费使用的用来进行生物计算的工具。
  • blaze – NumPy 和 Pandas 的大数据接口。
  • cclib – 一个用来解析和解释计算化学软件包输出结果的库。
  • NetworkX – 一个为复杂网络设计的高性能软件。
  • Neupy – 执行和测试各种不同的人工神经网络算法。
  • Numba – Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。
  • NumPy – 使用 Python 进行科学计算的基础包。
  • Open Babel – 一个化学工具箱,用来描述多种化学数据。
  • Open Mining – 使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。
  • orange – 通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。
  • Pandas – 提供高性能,易用的数据结构和数据分析工具。
  • PyDy – PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。
  • PyMC – 马尔科夫链蒙特卡洛采样工具。
  • RDKit – 化学信息学和机器学习软件。
  • SciPy – 由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。
  • statsmodels – 统计建模和计量经济学。
  • SymPy – 一个用于符号数学的 Python 库。
  • zipline – 一个 Python 算法交易库。
数据可视化

进行数据可视化的库。 参见: awesome-javascript。

  • matplotlib – 一个 Python 2D 绘图库。
  • bokeh – 用 Python 进行交互式 web 绘图。
  • ggplot – ggplot2 给 R 提供的 API 的 Python 版本。
  • plotly – 协同 Python 和 matplotlib 工作的 web 绘图库。
  • pygal – 一个 Python SVG 图表创建工具。
  • pygraphviz – Graphviz 的 Python 接口。
  • PyQtGraph – 交互式实时2D/3D/图像绘制及科学/工程学组件。
  • SnakeViz – 一个基于浏览器的 Python’s cProfile 模块输出结果查看工具。
  • vincent – 把 Python 转换为 Vega 语法的转换工具。
  • VisPy – 基于 OpenGL 的高性能科学可视化工具。
计算机视觉

计算机视觉库。

  • OpenCV – 开源计算机视觉库。
  • SimpleCV – 一个用来创建计算机视觉应用的开源框架。
机器学习

机器学习库。 参见: awesome-machine-learning.

  • Crab – 灵活、快速的推荐引擎。
  • gensim – 人性化的话题建模库。
  • hebel – GPU 加速的深度学习库。
  • NuPIC – 智能计算 Numenta 平台。
  • pattern – Python 网络挖掘模块。
  • PyBrain – 另一个 Python 机器学习库。
  • Pylearn2 – 一个基于 Theano 的机器学习库。
  • python-recsys – 一个用来实现推荐系统的 Python 库。
  • scikit-learn – 基于 SciPy 构建的机器学习 Python 模块。
  • pydeep – Python 深度学习库。
  • vowpalporpoise – 轻量级 Vowpal Wabbit 的 Python 封装。
  • skflow – 一个 TensorFlow 的简化接口(模仿 scikit-learn)。
MapReduce

MapReduce 框架和库。

  • dpark – Spark 的 Python 克隆版,一个类似 MapReduce 的框架。
  • dumbo – 这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。
  • luigi – 这个模块帮你构建批处理作业的复杂流水线。
  • mrjob – 在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。
  • PySpark – Spark 的 Python API 。
  • streamparse – 运行针对事实数据流的 Python 代码。集成了Apache Storm。
函数式编程

使用 Python 进行函数式编程。

  • CyToolz – Toolz 的 Cython 实现 : 高性能函数式工具。
  • fn.py – 在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。
  • funcy – 炫酷又实用的函数式工具。
  • Toolz – 一组用于迭代器,函数和字典的函数式编程工具。
第三方 API

用来访问第三方 API的库。 参见: List of Python API Wrappers and Libraries。

  • apache-libcloud – 一个为各种云设计的 Python 库。
  • boto – Amazon Web Services 的 Python 接口。
  • django-wordpress – WordPress models and views for Django.
  • facebook-sdk – Facebook 平台的 Python SDK.
  • facepy – Facepy 让和 Facebook’s Graph API 的交互变得更容易。
  • gmail – Gmail 的 Python 接口。
  • google-api-python-client – Python 用的 Google APIs 客户端库。
  • gspread – Google 电子表格的 Python API.
  • twython – Twitter API 的封装。
DevOps 工具

用于 DevOps 的软件和库。

  • Ansible – 一个非常简单的 IT 自动化平台。
  • SaltStack – 基础设施自动化和管理系统。
  • OpenStack – 用于构建私有和公有云的开源软件。
  • Docker Compose – 快速,分离的开发环境,使用 Docker。
  • Fabric – 一个简单的,Python 风格的工具,用来进行远程执行和部署。
  • cuisine – 为 Fabric 提供一系列高级函数。
  • Fabtools – 一个用来编写超赞的 Fabric 文件的工具。
  • gitapi – Git 的纯 Python API。
  • hgapi – Mercurial 的纯 Python API。
  • honcho – Foreman的 Python 克隆版,用来管理基于Procfile的应用。
  • pexpect – Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。
  • psutil – 一个跨平台进程和系统工具模块。
  • supervisor – UNIX 的进程控制系统。
任务调度

任务调度库。

  • APScheduler – 轻巧但强大的进程内任务调度,使你可以调度函数。
  • django-schedule – 一个 Django 排程应用。
  • doit – 一个任务执行和构建工具。
  • gunnery – 分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。
  • Joblib – 一组为 Python 提供轻量级作业流水线的工具。
  • Plan – 如有神助地编写 crontab 文件。
  • schedule – 人性化的 Python 任务调度库。
  • Spiff – 使用纯 Python 实现的强大的工作流引擎。
  • TaskFlow – 一个可以让你方便执行任务的 Python 库,一致并且可靠。
外来函数接口

使用外来函数接口的库。

  • cffi – 用来调用 C 代码的外来函数接口。
  • ctypes – (Python 标准库) 用来调用 C 代码的外来函数接口。
  • PyCUDA – Nvidia CUDA API 的封装。
  • SWIG – 简化的封装和接口生成器。
高性能

让 Python 更快的库。

  • Cython – 优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。
  • PeachPy – 嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。
  • PyPy – 使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。
  • Pyston – 使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。
  • Stackless Python – 一个强化版的 Python。
微软的 Windows平台

在 Windows 平台上进行 Python 编程。

  • Python(x,y) – 面向科学应用的 Python 发行版,基于 Qt 和 Spyder。
  • pythonlibs – 非官方的 Windows 平台 Python 扩展二进制包。
  • PythonNet – Python 与 .NET 公共语言运行库 (CLR)的集成。
  • PyWin32 – 针对 Windows 的Python 扩展。
  • WinPython – Windows 7/8 系统下便携式开发环境。
网络可视化和SDN

用来进行网络可视化和SDN(软件定义网络)的工具和库。

  • Mininet – 一款流行的网络模拟器以及用 Python 编写的 API。
  • POX – 一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。
  • Pyretic – 火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。
  • SDX Platform – 基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。
硬件

用来对硬件进行编程的库。

  • ino -操作Arduino的命令行工具。
  • Pyro – Python 机器人编程库。
  • PyUserInput – 跨平台的,控制鼠标和键盘的模块。
  • scapy – 一个非常棒的操作数据包的库。
  • wifi – 一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。
  • Pingo – Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。
兼容性

帮助从 Python 2 向 Python 3迁移的库。

  • Python-Future – 这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。
  • Python-Modernize – 使 Python 代码更加现代化以便最终迁移到 Python 3。
  • Six – Python 2 和 3 的兼容性工具。
杂项

不属于上面任何一个类别,但是非常有用的库。

  • blinker – 一个快速的 Python 进程内信号/事件分发系统。
  • itsdangerous – 一系列辅助工具用来将可信的数据传入不可信的环境。
  • pluginbase – 一个简单但是非常灵活的 Python 插件系统。
  • Pychievements – 一个用来创建和追踪成就的 Python 框架。
  • Tryton – 一个通用商务框架。
算法和设计模式

Python 实现的算法和设计模式。

  • algorithms -一个 Python 算法模块
  • python-patterns – Python 设计模式的集合。
  • sortedcontainers – 快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。
编辑器插件

编辑器和 IDE 的插件

  • Emacs
    • Elpy – Emacs Python 开发环境。
  • Sublime Text
    • SublimeJEDI – 一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。
    • Anaconda – Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。
  • Vim
    • YouCompleteMe – 引入基于 Jedi 的 Python 自动补全引擎。
    • Jedi-vim – 绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。
    • Python-mode – 将 Vim 变成 Python IDE 的一款多合一插件。
  • Visual Studio
    • PTVS – Visual Studio 的 Python 工具
集成开发环境

流行的 Python 集成开发环境。

  • PyCharm – 商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。
  • LiClipse – 基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。
  • Spyder – 开源 Python IDE。
服务

在线工具和简化开发的 API 。

持续集成

参见: awesome-CIandCD.

  • Travis CI – 一个流行的工具,为你的开源和私人项目提供持续集成服务。(仅支持 GitHub)
  • CircleCI – 一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)
  • Vexor CI – 一个为私人 app 提供持续集成的工具,支持按分钟付费。
  • Wercker – 基于 Docker 平台,用来构建和部署微服务。
代码质量
  • Codacy – 自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。
  • QuantifiedCode – 一个数据驱动、自动、持续的代码审查工具。
资源

在这里可以找到新的 Python 库。

网站
  • r/Python
  • CoolGithubProjects
  • Django Packages
  • Full Stack Python
  • Python 3 Wall of Superpowers
  • Python Hackers
  • Python ZEEF
  • Trending Python repositories on GitHub today
  • PyPI Ranking
周刊
  • Import Python Newsletter
  • Pycoder’s Weekly
  • Python Weekly
Twitter
  • @codetengu
  • @getpy
  • @planetpython
  • @pycoders
  • @pypi
  • @pythontrending
  • @PythonWeekly
Python 资源大全中文版

伯乐在线已在 GitHub 上发起「Python 资源大全中文版」的整理。欢迎扩散、欢迎加入。

GitHub - jobbole/awesome-python-cn: Python资源大全中文版

编辑于 2017-12-31

轮子哥

@vczh
的回答虽然是个玩笑(urllib、urlib2、urllib3),但是,也确实反映出了Python标准库的混乱。就我个人的使用感受来说,Python和Python标准库在数据结构方面非常强大,但是,在网络和邮件这两块,设计得非常糟糕。正是由于标准库的不完美,才有了更多更好的开源项目。对于Python程序员来说,可谓是"失之东隅,收之桑榆"。重要的是我们要善于发现并使用这些项目。

下面就给大家推荐几个我用过的,并且特别好用的项目,而不是简单的贴一下awesome python。相信很多人看完awesome python以后,只是简单的收藏一下,并没有很多帮助。

1. yagmail

Python官网上发邮件的例子( Examples - Python 2.7.13 documentation),大家感受一下。反正我看到这一堆的import就已经被吓退场了。
#!/usr/bin/env python

"""Send the contents of a directory as a MIME message."""

import os
import sys
import smtplib
# For guessing MIME type based on file name extension
import mimetypes

from optparse import OptionParser

from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
如果使用yagmail,发送一个带附件的邮件,只需要2行代码:
import yagmail
yag = yagmail.SMTP(user='[email protected]', password='nicai?', host='smtp.163.com', port='25')
yag.send(user, subject = "I now can send an attachment", attachments=['a.txt', 'b.jpg']) 



2. requests

requests很多人都推荐过了,不过可能一些同学感受不到requests到底好在哪里。我们就以官网的例子为例简单说明,在没有request之前,如果我们要请求api.github.com/user,需要像下面这样:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2

gh_url = 'https://api.github.com'

req = urllib2.Request(gh_url)

password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, gh_url, 'user', 'pass')

auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)

urllib2.install_opener(opener)

handler = urllib2.urlopen(req)

print handler.getcode()
print handler.headers.getheader('content-type')

# ------
# 200
# 'application/json'
用requests以后,做同样的事情,我们可以这样(注意,前3行代码等于上面一整段代码):
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}


3. psutil

psutil是用来获取操作系统监控以及进程管理的,如果你正在写一个监控系统(或脚本),赶紧去试试。这么说吧,我曾经使用psutil把网易内部的一个监控模块,从1000+行重构到了100+行。

我这里推荐的几个库,可能yagmail对最多人有用。而psutil,对专业的人士最有用。如果你要写一个监控系统,不使用psutil的话,只能直接去/proc目录下读取想用的文件进行计算,或者执行iostat、vmstat、df等linux命令获取命令输出,不管哪一种方法,都要处理很多繁琐的细节。有了psutil以后,就轻松多了。贴段代码大家感受一下:
def get_network_info(self):
"""
    psutil.net_io_counters()
    snetio(bytes_sent=12541464, bytes_recv=21459989, packets_sent=80164, packets_recv=88134, errin=0, errout=0,
     dropin=0, dropout=0)
    """
return psutil.net_io_counters()

def get_memory_used(self):
"""
    psutil.virtual_memory()
    svmem(total=4159041536, available=3723980800, percent=10.5, used=1599082496,
     free=2559959040, active=587403264, inactive=897105920, buffers=95989760, cached=1068032000)
    """
memory_info = psutil.virtual_memory()
memory_used = ( memory_info.total * memory_info.percent / 100 ) / 1024 / 1024
return memory_used

此外,使用越来越广泛的监控工具glances(如果没用过,要不现在就是试试?),就是用psutil收集相关数据的。

4. BeautifulSoup

如果你写爬虫,还在用XPath解析HTML,那赶紧用用BeautifulSoup,比XPath好用一百倍;如果你还在用正则表达式从HTML中获取内容,BeautifulSoup能让你好用到哭。(补充:评论里大家都说XPath更好用,难道是我思维方式和大家不一样?)

BeautifulSoup是用来解析HTML的,特点就是好用,有人吐槽BeautifulSoup慢?我不在乎BeautifulSoup比XPath慢多少,我只知道,我的时间比机器的更宝贵。

例如,要找到页面中所有的links,如下所示:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"))
for link in soup.find_all('a'):
print(link.get('href'))
例如,我在编写知乎的爬虫的时候,对于每一个用户的”关注”页面,对于每一个关注对象,有如下的tag:
....... .......

所以,解析单个关注的用户代码如下所示:
 soup = BeautifulSoup(text)
#通过属性找到这个div,对于每个用户,对应于这样一个div
items = soup.find_all('div', class_="zm-profile-card zm-profile-section-item zg-clear no-hovercard")
for item in items:
# 获取这个div下的标签的title属性
name = item.a.attrs['title']
# 获取这个div下的标签下的标签里面的src属性
avatar  = item.a.img.attrs['src']

有了BeautifulSoup以后,爬虫操作就变得特别简单了。脏活累活别人都帮忙做好了。


5. utils

除了开源的库以外,还有些开源项目的DataStruct.py helper.py utils.py文件,也值得看一看。里面很多好东西,都是可以直接拿过来用的。

哪些 Python 库让你相见恨晚?_第1张图片
我举几个例子。
  • requests中的CaseInsensitiveDict(github.com/kennethreitz),大家看名字就知道什么意思了,我就不多说了。
# -*- coding: utf-8 -*-

"""
requests.structures
~~~~~~~~~~~~~~~~~~~

Data structures that power Requests.

"""


class CaseInsensitiveDict(dict):
"""Case-insensitive Dictionary

    For example, ``headers['content-encoding']`` will return the
    value of a ``'Content-Encoding'`` response header."""
"""
    1. low_keys是一个字典,key是dict中key的消息形式,大写是dict中的key
    2. 如果对字典进行了修改操作,则清空low_keys
    3. 获取字典时,通过get --> __getitem__ --> __contains__ -->
    通过low_keys字典获取到真实的key,通过真实的key获取dict中的value
    """

@property
def lower_keys(self):
if not hasattr(self, '_lower_keys') or not self._lower_keys:
self._lower_keys = dict((k.lower(), k) for k in self.iterkeys())
return self._lower_keys

def _clear_lower_keys(self):
if hasattr(self, '_lower_keys'):
self._lower_keys.clear()

def __setitem__(self, key, value):
dict.__setitem__(self, key, value)
self._clear_lower_keys()

def __delitem__(self, key):
dict.__delitem__(self, key)
self._lower_keys.clear()

def __contains__(self, key):
return key.lower() in self.lower_keys

def __getitem__(self, key):
# We allow fall-through here, so values default to None
if key in self:
return dict.__getitem__(self, self.lower_keys[key.lower()])

def get(self, key, default=None):
if key in self:
return self[key]
else:
return default

def main():
d = CaseInsensitiveDict()
d['Laimingxing'] = 'Laimingxing'
d['LAimingxing'] = 'LAimingxing'
print d
print d['LAimingxing']

if __name__ == '__main__':
main()

  • werkzeug中的LocalProxy、ImmutableList、ImmutableDict(github.com/pallets/werk),其中ImmutableList和ImmutableDict大家一看就知道是什么意思,这里要说的是LocalProxy,使用LocalProxy,分分钟实现代理模式。

  • web.py的utils.py中各个函数和类都值得看一看(github.com/webpy/webpy/),不但可以了解好用的函数和数据结构,而且,还能够学习一下高手的Python代码。例如:
def dictreverse(mapping):
"""
    Returns a new dictionary with keys and values swapped.

        >>> dictreverse({1: 2, 3: 4})
        {2: 1, 4: 3}
    """
return dict([(value, key) for (key, value) in iteritems(mapping)])

def dictfind(dictionary, element):
"""
    Returns a key whose value in `dictionary` is `element`
    or, if none exists, None.

        >>> d = {1:2, 3:4}
        >>> dictfind(d, 4)
        3
        >>> dictfind(d, 5)
    """
for (key, value) in iteritems(dictionary):
if element is value:
return key

class Storage(dict):
"""
    A Storage object is like a dictionary except `obj.foo` can be used
    in addition to `obj['foo']`.

        >>> o = storage(a=1)
        >>> o.a
        1
        >>> o['a']
        1
        >>> o.a = 2
        >>> o['a']
        2
        >>> del o.a
        >>> o.a
        Traceback (most recent call last):
            ...
        AttributeError: 'a'

    """
def __getattr__(self, key):
try:
return self[key]
except KeyError as k:
raise AttributeError(k)

def __setattr__(self, key, value):
self[key] = value

def __delattr__(self, key):
try:
del self[key]
except KeyError as k:
raise AttributeError(k)

def __repr__(self):
return ''

ps:web.py的作者是亚伦·斯沃茨(Aaron Swartz),一位年少成名的计算机天才,著名社交网站Reddit联合创始人。致力于网络信息开放,却因涉嫌非法侵入麻省理工学院(MIT)和JSTOR(全称Journal Storage,存储学术期刊的在线系统)被指控,将受到最高35年监禁和100万美元罚款。该案正在认罪辩诉阶段,而亚伦·斯沃茨却于2013年1月11日在其纽约布鲁克林的寓所内,用一根皮带上吊自杀,尸体随后被女友发现,年仅26岁。

当然,我这还有很多乱七八糟的好东西,如果大家感兴趣的话,我再补充吧。要学Python看这里:乐岸教育Python公开课-在线播放-优酷网,视频高清在线观看

此外,大家反馈,这个回答也对大家很有帮助: 怎么样才算是精通 Python?
编辑于 2017-02-20
补充三个有助于自动化日常工作的:
  • sh:sh 1.08 — sh v1.08 documentation
    可以用 Python 函数的语法去调用 shell 命令,sh 之于 subprocess 类似 requests 之于 urllib2。
  • Watchdog:Watchdog — watchdog 0.8.0 documentation
    监视文件系统改动。
  • Path:API — path.py 5.2 documentation
    简化文件系统相关操作。
发布于 2014-07-25

除bug神器pyrasite-shell,“Give it a pid, get a shell”。给一个运行中的Python进程ID就能提供这个进程内的Python REPL,无需重启/修改代码。

通常的情景是:服务器不响应了->日志信息不够->找出服务器pid->用pyrasite-shell连上去->打印stack/打印变量/干掉卡住的线程->Profit!

(知道这个包后我再也不用Python处理敏感信息了233)
编辑于 2017-08-01
太多了
网络
  • Scapy, Scapy3k: 发送,嗅探,分析和伪造网络数据包。可用作交互式包处理程序或单独作为一个库。
  • pypcap, Pcapy, pylibpcap: 几个不同 libpcap 捆绑的python库
  • libdnet: 低级网络路由,包括端口查看和以太网帧的转发
  • dpkt: 快速,轻量数据包创建和分析,面向基本的 TCP/IP 协议
  • Impacket: 伪造和解码网络数据包,支持高级协议如 NMB 和 SMB
  • pynids: libnids 封装提供网络嗅探,IP 包碎片重组,TCP 流重组和端口扫描侦查
  • Dirtbags py-pcap: 无需 libpcap 库支持读取 pcap 文件
  • flowgrep: 通过正则表达式查找数据包中的 Payloads
  • Knock Subdomain Scan: 通过字典枚举目标子域名
  • SubBrute: 快速的子域名枚举工具
  • Mallory: 可扩展的 TCP/UDP 中间人代理工具,可以实时修改非标准协议
  • Pytbull: 灵活的 IDS/IPS 测试框架(附带超过300个测试样例)
调试和逆向工程
  • Paimei: 逆向工程框架,包含 PyDBG, PIDA,pGRAPH
  • Immunity Debugger: 脚本 GUI 和命令行调试器
  • mona.py: Immunity Debugger 中的扩展,用于代替 pvefindaddr
  • IDAPython: IDA pro 中的插件,集成 Python 编程语言,允许脚本在 IDA Pro 中执行
  • PyEMU: 全脚本实现的英特尔32位仿真器,用于恶意软件分析
  • pefile: 读取并处理 PE 文件
  • pydasm: Python 封装的 libdasm
  • PyDbgEng: Python 封装的微软 Windows 调试引擎
  • uhooker: 截获 DLL 或内存中任意地址可执行文件的 API 调用
  • diStorm: AMD64 下的反汇编库
  • python-ptrace: Python 写的使用 ptrace 的调试器
  • vdb/vtrace: vtrace 是用 Python 实现的跨平台调试 API, vdb 是使用它的调试器
  • Androguard: 安卓应用程序的逆向分析工具
  • Capstone: 一个轻量级的多平台多架构支持的反汇编框架。支持包括ARM,ARM64,MIPS和x86/x64平台。
  • PyBFD: GNU 二进制文件描述(BFD)库的 Python 接口
Fuzzing
  • Sulley: 一个模糊器开发和模糊测试的框架,由多个可扩展的构件组成的
  • Peach Fuzzing Platform: 可扩展的模糊测试框架(v2版本 是用 Python 语言编写的)
  • antiparser: 模糊测试和故障注入的 API
  • TAOF: (The Art of Fuzzing, 模糊的艺术)包含 ProxyFuzz, 一个中间人网络模糊测试工具
  • untidy: 针对 XML 模糊测试工具
  • Powerfuzzer: 高度自动化和可完全定制的 Web 模糊测试工具
  • SMUDGE: 纯 Python 实现的网络协议模糊测试
  • Mistress: 基于预设模式,侦测实时文件格式和侦测畸形数据中的协议
  • Fuzzbox: 媒体多编码器的模糊测试
  • Forensic Fuzzing Tools: 通过生成模糊测试用的文件,文件系统和包含模糊测试文件的文件系统,来测试取证工具的鲁棒性
  • Windows IPC Fuzzing Tools: 使用 Windows 进程间通信机制进行模糊测试的工具
  • WSBang: 基于 Web 服务自动化测试 SOAP 安全性
  • Construct: 用于解析和构建数据格式(二进制或文本)的库
  • fuzzer.py(feliam): 由 Felipe Andres Manzano 编写的简单模糊测试工具
  • Fusil: 用于编写模糊测试程序的 Python 库
Web
  • Requests: 优雅,简单,人性化的 HTTP 库
  • HTTPie: 人性化的类似 cURL 命令行的 HTTP 客户端
  • ProxMon: 处理代理日志和报告发现的问题
  • WSMap: 寻找 Web 服务器和发现文件
  • Twill: 从命令行界面浏览网页。支持自动化网络测试
  • Ghost.py: Python 写的 WebKit Web 客户端
  • Windmill: Web 测试工具帮助你轻松实现自动化调试 Web 应用
  • FunkLoad: Web 功能和负载测试
  • spynner: Python 写的 Web浏览模块支持 Javascript/AJAX
  • python-spidermonkey: 是 Mozilla JS 引擎在 Python 上的移植,允许调用 Javascript 脚本和函数
  • mitmproxy: 支持 SSL 的 HTTP 代理。可以在控制台接口实时检查和编辑网络流量
  • pathod/pathoc: 变态的 HTTP/S 守护进程,用于测试和折磨 HTTP 客户端
取证
  • Volatility: 从 RAM 中提取数据
  • Rekall: Google 开发的内存分析框架
  • LibForensics: 数字取证应用程序库
  • TrIDLib: Python 实现的从二进制签名中识别文件类型
  • aft: 安卓取证工具集恶意软件分析
  • pyew: 命令行十六进制编辑器和反汇编工具,主要用于分析恶意软件
  • Exefilter: 过滤 E-mail,网页和文件中的特定文件格式。可以检测很多常见文件格式,也可以移除文档内容。
  • pyClamAV: 增加你 Python 软件的病毒检测能力
  • jsunpack-n: 通用 JavaScript 解释器,通过模仿浏览器功能来检测针对目标浏览器和浏览器插件的漏洞利用
  • yara-python: 对恶意软件样本进行识别和分类
  • phoneyc: 纯 Python 实现的蜜罐
  • CapTipper: 分析,研究和重放 PCAP 文件中的 HTTP 恶意流量
PDF
  • peepdf: Python 编写的PDF文件分析工具,可以帮助检测恶意的PDF文件
  • Didier Stevens’ PDF tools: 分析,识别和创建 PDF 文件(包含PDFiD,pdf-parser,make-pdf 和 mPDF)
  • Opaf: 开放 PDF 分析框架,可以将 PDF 转化为 XML 树从而进行分析和修改。
  • Origapy: Ruby 工具 Origami 的 Python 接口,用于审查 PDF 文件
  • pyPDF2: Python PDF 工具包包含:信息提取,拆分,合并,制作,加密和解密等等
  • PDFMiner: 从 PDF 文件中提取文本
  • python-poppler-qt4: Python 写的 Poppler PDF 库,支持 Qt4
  • 杂项
  • InlineEgg: 使用 Python 编写的具有一系列小功能的工具箱
  • Exomind: 是一个利用社交网络进行钓鱼攻击的工具
  • RevHosts: 枚举指定 IP 地址包含的虚拟主句
  • simplejson: JSON 编码和解码器,例如使用 Google’s AJAX API
  • PyMangle: 命令行工具和一个创建用于渗透测试使用字典的库
  • Hachoir: 查看和编辑二进制流
其他有用的库和工具
  • IPython: 增强的交互式 Python shell
  • Beautiful Soup: HTML 解析器
  • matplotlib: 制作二维图
  • Mayavi: 三维科学数据的可视化与绘图
  • RTGraph3D: 在三维空间中创建动态图
  • Twisted: Python 语言编写的事件驱动的网络框架
  • Suds: 一个轻量级的基于SOAP的python客户端
  • M2Crypto: Python 语言对 OpenSSL 的封装
  • NetworkX: 图库(边, 节点)
  • Pandas: 基于 Numpy 构建的含有更高级数据结构和工具的数据分析包
  • pyparsing: 通用解析模块
  • lxml: 使用 Python 编写的库,可以迅速、灵活地处理 XML
  • Whoosh: 纯python实现的全文搜索组件
  • Pexpect: 控制和自动化程序
  • Sikuli: 使用 Jython 脚本自动化基于截图进行视觉搜索
  • PyQt 和PySide: Python 捆绑的 Qt 应用程序框架和 GUI 库
编辑于 2016-03-04

Tenacity。

Python重试从此无比简单。这是我博客上的一篇文章,毫不掩饰我对Tenacity这个第三方库的喜爱和赞美之情。


---
title: Tenacity——Exception Retry 从此无比简单
date: 2017-06-18 00:17:47
tags: ['Python', 'Exception', 'Tenacity']
category: ['Python']
comments: true
---

[Python 装饰器装饰类中的方法](kingname.info/2017/04/1)这篇文章,使用了装饰器来捕获代码异常。这种方式可以让代码变得更加简洁和Pythonic。

在写代码的过程中,处理异常并重试是一个非常常见的需求。但是如何把捕获异常并重试写得简洁高效,这就是一个技术活了。

以爬虫开发为例,由于网页返回的源代码有各种不同的情况,因此捕获异常并重试是很常见的要求。下面这几段代码是我多年以前,在刚开始学习爬虫的时候,由于捕获异常并重试导致代码混乱化过程。

代码一开始的逻辑非常简单,获取网页后台API返回的JSON字符串,转化成字典,提取出里面`data`的数据,然后传递给`save()`函数:

```python
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

代码运行一段时间,发现有时候JSON会随机出现解析错误。于是添加捕获异常并重试的功能:

```python
def extract(url):
info_json = requests.get(url).text
try:
info_dict = json.loads(info_json)
except Exception:
print('网页返回的不是有效的JSON格式字符串,重试!')
extract(url)
return
data = info_dict['data']
save(data)
```

后来又发现,有部份的URL会导致递归深度超过最大值。这是因为有一些URL返回的是数据始终是错误的,而有些URL,重试几次又能返回正常的JSON数据,于是限制只重试3次:

```python
def extract(url):
info_json = requests.get(url).text
try:
info_dict = json.loads(info_json)
except Exception:
print('网页返回的不是有效的JSON格式字符串,重试!')
for i in range(3):
if extract(url):
break

data = info_dict['data']
save(data)
return True
```

后来又发现,不能立刻重试,重试要有时间间隔,并且时间间隔逐次增大......

从上面的例子中可以看到,对于异常的捕获和处理,一不小心就让整个代码变得很难看很难维护。为了解决这个问题,就需要通过装饰器来完成处理异常并重试的功能。

Python 有一个第三方库,叫做[Tenacity](tenacity.readthedocs.io),它实现了一种优雅的重试功能。

以上面爬虫最初的无限重试版本为例,如果想实现遇到异常就重试。只需要添加两行代码,爬虫的主体函数完全不需要做修改:

```python
from tenacity import retry

@retry
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

现在要限制重试次数为3次,代码总行数不需要新增一行就能实现:

```python
from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

现在想每5秒钟重试一次,代码行数也不需要增加:

```python
from tenacity import retry, wait_fixed

@retry(wait=wait_fixed(5))
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

甚至重试的时间间隔想指数级递增,代码行数也不需要增加:
```python
from tenacity import retry, wait_exponential

@retry(wait=wait_exponential(multiplier=1, max=10)) # 重试时间间隔满足:2^n * multiplier, n为重试次数,但最多间隔10秒
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

重试不仅可以限制次数和间隔时间,还可以针对特定的异常进行重试。在爬虫主体中,其实有三个地方可能出现异常:

* requests获取网页出错
* 解析JSON出错
* info_dict字典里面没有`data`这个key

如果只需要在JSON解析错误时重试,由于异常类型为`json.decoder.JSONDecodeError`,所以就可以通过参数来进行限制:

```python
from tenacity import retry, retry_if_exception_type
from json.decoder import JSONDecodeError

@retry(retry=retry_if_exception_type(JSONDecodeError))
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

当然,这些特性都可以进行组合,例如只对`JSONDecodeError` 进行重试,每次间隔5秒,重试三次,那就写成:

```python
from tenacity import retry, retry_if_exception_type, wait_fixed, stop_after_attempt
from json.decoder import JSONDecodeError

@retry(retry=retry_if_exception_type(JSONDecodeError), wait=wait_fixed(5), stop=stop_after_attempt(3))
def extract(url):
info_json = requests.get(url).content.decode()
info_dict = json.loads(info_json)
data = info_dict['data']
save(data)
```

自始至终,爬虫主体的代码完全不需要做任何修改。

Tenacity是我见过的,最 Pythonic ,最优雅的第三方库。


kingname.info/2017/06/1

编辑于 2017-07-21
相见恨晚的库有很多啊
决定利用午休的时间,把曾经惊艳过我的库都整理出来好了
还不勇敢的点赞么亲
马上为你呈上一锅热腾腾的美味,当当当当

web框架:
  • django
  • flask
  • tornado
  • bottle
微信框架:
  • WeRoBot
网络:
  • requests
  • httpie
爬虫:
  • scrapy
系统方面:
  • fabric
  • ansible
ORM:
  • peewee
  • sqlalchemy
模板引擎:
  • jinja2
图像处理:
  • Pillow
  • Python Imaging Library (PIL)
命令行应用:
  • docopt
静态网站生成器
  • pelican
数据处理:
  • pandas
其他:
  • awesome-python
-------------我是分割线-------------
此外我对django关注比较多,专门列出django部分
等有空再对其做细分
  • django-debug-toolbar
  • django-rest-framework
  • django-xadmin
  • wagtail
  • pinax
  • mezzanine
  • django-crispy-forms
  • django-compressor
  • django-grappelli
  • django-taggit
  • django-basic-apps
  • django-userena
  • django-mptt
  • sorl-thumbnail
  • django-guardian
  • django-pipeline
编辑于 2014-07-25

1. GitHub - darknessomi/musicbox: 网易云音乐命令行版本。 高品质网易云音乐命令行版本,简洁优雅,丝般顺滑,基于Python编写。

https://pic2.zhimg.com/3d886ac0" data-rawwidth="1330" data-rawheight="996" class="content_image" width="1330" data-original="pic2.zhimg.com/3d886ac0">2.

2. GitHub - wting/autojump: A cd command that learns。 一个文件系统跳转的快捷命令。同样的还有shell编写的 GitHub - rupa/z: z is the new j, yo,用了就知道有多提高效率。

3. GitHub - docopt/docopt: Pythonic command line arguments parser, that will make you smile。上面有人提到了,但是没有人说到精髓,它使用脚本的docstring作为命令行的解析文本,也就是你直接写注释就可以完成argparse复杂的添加选项、指定参数等功能,所见即所得。

4. GitHub - Runscope/httpbin: HTTP Request & Response Service, written in Python + Flask.。我还曾经写过类似的一个应用,那时候还没有遇到它。读它的源码时候发现它其实好几个的地方实现的很优雅。

5. GitHub - Russell91/pythonpy: the swiss army knife of the command line。有时候我会做一些简单地计算和功能的验证,之前得输入ipython然后imort对应的库,再执行(或者用 python -c 'import aaa; print aaa.bbb(1)'的方式)。现在用pythonpy,在命令行一句就好了。

6. GitHub - p-e-w/maybe: :rabbit2: See what a program does before deciding whether you really want it to happen.。大家都听过那个著名一个空格引发的惨剧吧,我以前也发生过本来是要执行「rm -rf tmp/*」, 结果卡了一下,执行成了「rm -rf tmp/ *」的惨痛经历,如果你有用maybe的习惯,就不会发生悲剧啦。

7. GitHub - nvbn/thefuck: Magnificent app which corrects your previous console command. 简直神器,修正你之前的命令行指令。

https://pic3.zhimg.com/07ee85a3" data-rawwidth="1376" data-rawheight="752" class="content_image" width="1376" data-original="pic3.zhimg.com/07ee85a3">8.

8. GitHub - getsentry/sentry: Sentry is cross-platform crash reporting built with love。错误搜集系统,现在应该没有哪个公司(不只是Python语言)不用它了吧?

9. GitHub - faif/python-patterns: A collection of design patterns/idioms in Python,以前学习设计模式要从很多文章甚至其他语言的版本中去理解,特别苦,直到我发现了这个项目,整个人都不好了。

10. github.com/jkbrzt/httpi。一个命令行HTTP 客户端,cURL 的替代品,它是Python语言中被star数量最多的项目,可见它的受欢迎程度,我几乎每天都在用它, 甚至为了表达对它的喜欢,特地读它的代码,找机会「混」进了它的项目贡献者列表。

欢迎关注本人的微信公众号获取更多Python相关的内容(也可以直接搜索「Python之美」):

weixin.qq.com/r/D0zH35L (二维码自动识别)

编辑于 2017-08-10

(1)hhatto/autopep8:自动格式化Python代码以符合PEP 8

1、一段测试代码如下:

哪些 Python 库让你相见恨晚?_第2张图片

2、使用命令:autopep8 --in-place --aggressive --aggressive test.py

3、转换之后的代码如下:

哪些 Python 库让你相见恨晚?_第3张图片

(2)python-for-android :把Python脚本打包成APK。

(3)python-visualization/folium : 用Python辅助实现地图的可视化或者有关于地图的操作,可以直接解析Json数据进行可视化。



(4)mzucker/noteshrink :把手写的笔记转成更加简单清晰漂亮的图片,因为平常记笔记比较多,所以比较有用。

1、一张我以前学习JavaScript时候写下的笔记照片(字丑请忽略)

2、执行命令:python noteshrink.py test.jpg

3、处理之后的结果


编辑于 2017-04-19
又到了年终盘点时间,Tryo Labs 和去年一样推出了2016 年十大 Python 库的榜单。对于这份榜单的筛选条件,Tryo Labs 写道:「我们避开了 Django、Flask 等已经成为今天的标准库的已经成功的项目。另外,这个榜单中有的库是 2016 年之前建立的,但它们在今年的受欢迎度出现了暴增或我们认为它们非常好所以可以进入这个榜单。」下面是榜单详情:

1. Zappa


链接:Serverless Python Web Services


自 AWS Lambda(以及后续的其它项目)发布以来,人们的关注点就全部转移到了无服务器架构上。这些架构让我们可以将微服务(microservice)部署到云端、部署到一个完全可管理的环境中;在这样的环境中,人们不用关心管任何服务器,而只需要分配无状态的、短暂的计算容器(computing container)即可——一个服务提供商即可完全管理。通过这一范式,事件(比如流量尖峰)可以触发更多这些容器的执行,因此有可能能够处理「无限的」水平扩展。


Zappa 是一个用于 Python 的无服务器框架,尽管(至少目前)它仅支持 AWS Lambda 和 AWS API Gateway。它使得开发这样架构的应用变得非常简单,能将你从使用 AWS Console 或 API 的繁琐配置工作中解放出来,而且它还有各种用于简化部署和管理不同环境的命令。


2. Sanic + uvloop


链接:

Sanic: channelcat/sanic

uvloop: uvloop: Blazing fast Python networking


谁说 Python 不能很快?Sanic 不仅有可能是有史以来最好的软件库名字,也可能是有史以来最快的 Python 网页框架,而且似乎也远远超过其它框架。它是一个专为速度而设计的类 Flask 的 Python 3.5+ 网页服务器。另一个库 uvloop 是一个用于 asyncio 的事件循环(event loop,其底层使用了 libuv)的超快速的插件替代。这两个加起来就是一个强大的组合!


根据 Sanic 的作者的基准测试,uvloop 可以驱动 Sanic 每秒处理超过 3.3 万条请求,这实在太强了!(比 node.js 还快)。你的代码可以受益于这种新的 async/await 语法——它们会看起来很整洁;此外我们也喜欢 Flask 风格的 API。你一定要试试 Sanic,而且如果你也在使用 asyncio,你也可以无需太多修改你的代码就能受益于 uvloop。


3. asyncpg


链接:MagicStack/asyncpg


跟进 asyncio 框架的最新进展,来自 MagicStack 的人为我们带来了这个高效的异步(目前只支持 CPython 3.5)数据库接口库,其是专门为 PostgreSQL 设计的。它有零相关性,这意味不需要安装 libpq。相对而言,withpsycopg2(最流行的 Python 的 PostgreSQL 适配器)需要以文本格式与数据库服务器交换数据;而 asyncpg 则实现了 PostgreSQL 二进制 I/O 协议,这让其不仅支持通用类型,而且还有其它许多性能上的好处。


其基准是很清楚的:asyncpg 平均至少比 psycopg2(或 aiopg)快 3 倍,也比 node.js 和 Go 实现更快。


4. boto3


链接:boto/boto3


如果你的基础设施部署在 AWS 上或使用了它们的服务(比如 S3),那么你应该非常乐意看到 boto(用于 AWS API 的 Python 接口)被从头到尾完整重写了。而且你不用一次性就完全迁移你的应用:你可以同时使用 boto3 和 boto(2) ;比如仅在你应用中新的部分使用 boto3。


这个新的实现在不同的服务间会一致的多,而且因为其使用了数据驱动的方法来在运行时间(runtime)从 JSON 描述文件中生成类,所以其总是可以实现快速更新。再也不用滞后于新的 Amazon API 功能了,赶紧使用 bot3 吧!


5.TensorFlow


链接:tensorflow.org/


大名鼎鼎的 TensorFlow。自从谷歌在 2015 年 11 月发布以来,这个库已经获得了很多改进,它已成为时下最流行的 GitHub Python 库。简而言之,TensorFlow 是一个使用数据流图(data flow graphs)的数值计算库,可以在 GPU 或 CPU 上运行。


在过去一年里,我们目睹了 TensorFlow 在机器学习社区中掀起了一股新风潮(特别是在深度学习领域),它不仅出现在研究领域,而且在应用领域也非常常见。如果你正在做深度学习并想在高级别接口中使用它,你可以尝试以它为后端的 Keras 或新推出的 TensorFlow-Slim。


6.gym+universe


Gym:OpenAI Gym: A toolkit for developing and comparing reinforcement learning algorithms

Universe:Universe


如果你是人工智能圈内的人,肯定听说过非营利人工智能研究公司 OpenAI。他们的研究人员在今年开源了一些 Python 代码。Gym 是一个用于开发并比较强化学习算法的工具包。它包含一个开源库,这个库收集了一些可被用于测试强化学习算法的测试问题(环境)。它还包含一个站点与 API,能让你对比训练出的算法(代理,agent)的表现。因为它不在乎代理的实现方式,你可以选择使用自己的计算库建立代理:numpy、TensorFlow、Theano 等。


他们最近也发布了 Universe,这是一个用于研究通用人工智能在跨游戏、网页和其他应用上的表现的软件平台。Universe 能完美匹配 gym,因此它能让任何真实世界应用调整进 gym 环境中。研究人员希望这一无限的可能性能够加速对智能代理的研究,从而解决通用任务。


7.Bokeh


链接:Welcome to Bokeh


你可能熟知一些提供数据可视化的 Python 库,其中最流行的就是 matplotlib 和 seaborn。然而,Bokeh 被创造用来做交互可视化(interactive visualization),并且面向现代的网页浏览展示。这意味着 Bokeh 能创造出一个可以让你探索来自网页浏览器数据的情节(plot)。比较棒的是它紧密融合了 Juptyer Notebooks,所以你能使用它配合你的专业工具进行研究。它也有一个可选的服务器组件 bokeh-server,其带有许多强大的功能,比如在服务器端对大型数据集进行下采样、流传输数据、变换等。可点击网址 Gallery - Bokeh 0.12.3 documentation 查看案例,看起来很棒。


8.Blaze


链接:Ecosystem - Blaze 0.10.2rc1+5.g87dd886 documentation


有时候,当你对数据集运行分析时,却发现数据集过大,无法一次塞进计算机 RAM 中。如果你无法依赖 numpy 或 Pandas,你通常需要转而使用其他的工具,如 PostgreSQL、MongoDB、Hadoop、Spark 等等。这些工具都有其自身的优缺点,依照任务的特点,总有一种工具是适合你的。但决定转换工具是一项巨大的工程,因为你需要了解这些系统如何工作,以及如何以正确的形式插入数据。


Blaze 提供了一个统一的接口,让用户无需学习所有数据库技术。Blaze 库的核心是一种计算表达方式。Blaze 本身不会进行任何计算:它只是知道如何指定一个特定的后端,决定谁来执行任务。Blaze 还有其它很多功能(它形成了一个生态系统),它作为一个库被开发出来。例如,Dask 实现了一个可用于 NumPy 数组的插件,可以处理大于内存的内容和利用多核处理器,并且还具有动态任务调度能力。


9.Arrow


链接:crsmithdev/arrow


有一个流行的说法,在计算机科学领域只有两个大问题:无效缓存和命名。我认为这句话忽略了另一个大问题:管理数据时间(managing datetimes)。如果你曾经试图在 Python 中管理数据时间,你就会知道标准库里有巨量的模块和类型:datetime、date、 calendar、 tzinfo、 timedelta、 relativedelta、 pytz 等等。更糟糕的是,时区都自然设定为默认值。


Arrow 为开发者提供了「人类的时间(datetime for humans)」,提供了一种清晰的方法来创建、操作、格式化和转换日期、时间和时间戳。它可以用于替换 Python 2 和 3 的 datetime 类型,并提供了一个更友好的界面,同时加入新的功能(如 humanize)弥补了原系统的不足。即使你不需要 Arrow 提供的额外功能,使用它也可以大大减少代码中的引用。


10. Hug


链接:Embrace the APIs of the future


公开你的内部 API,这样可以大大简化 Python API 的开发过程。Hug 是一个仅限于 Python3 的库,提供在 Python 中创建 HTTP REST API 的最简单的方式。它不是一个 web 框架(虽然 Hug 提供这样的功能,而且表现很好),它的主要功能是公开正确的标准内部 Python API。这个想法非常简单:一次定义逻辑和结构,并且可以通过多种方式公开你的 API。目前,它支持公开 REST API 或命令行界面。


你可以使用类型注释(type annotations),让 Hug 不仅为你的 API 生成文件,同时提供验证和明确的错误消息,这可以让你的开发工作(和你的 API 用户的工作)变得轻松很多。Hug 构建在 Falcon 的高性能 HTTP 库之上,这意味着你可以使用任何 wsgi 兼容的服务器(例如 gunicorn)将其部署到生产环境中。


参考文章:Top 10 Python libraries of 2016 - Tryolabs Blog

发布于 2016-12-23
如果你要用python操作微信,安利一下itchat

先秀一下一个简单的使用案例,加了试试看呀:

weixin.qq.com/r/sUqKkkT (二维码自动识别)


下面是实现的代码:
import itchat, time

@itchat.msg_register(['Text', 'Map', 'Card', 'Note', 'Sharing'])
def text_reply(msg):
    itchat.send('%s: %s'%(msg['Type'], msg['Text']), msg['FromUserName'])

@itchat.msg_register(['Picture', 'Recording', 'Attachment', 'Video'])
def download_files(msg):
    fileDir = '%s%s'%(msg['Type'], int(time.time()))
    msg['Text'](fileDir)
    itchat.send('%s received'%msg['Type'], msg['FromUserName'])
    itchat.send('@%s@%s'%('img' if msg['Type'] == 'Picture' else 'fil', fileDir), msg['FromUserName'])

@itchat.msg_register('Friends')
def add_friend(msg):
    itchat.add_friend(**msg['Text'])
    itchat.get_contract()
    itchat.send_msg(msg['RecommendInfo']['UserName'], 'Nice to meet you!')

@itchat.msg_register('Text', isGroupChat = True)
def text_reply(msg):
    itchat.send(u'@%s\u2005I received: %s'%(msg['ActualNickName'], msg['Content']), msg['FromUserName'])


itchat.auto_login()
itchat.run()

用Python写东西是不是很爽:)
编辑于 2016-05-10

一些必须的:(越早发现越好)

Python内带的库就不提了。


1)基本工具:

virtualenv(虚拟环境)
pip、setuptools (e.g. easy_install,这些东西肯定要呢)
ipython(用了以后,就不再想用普通的python shell)
ipdb(ipython上的debugger,怎么能不用?难道要一直重新运行print某变量?)
ipython notebook(又名jupyter,在线写代码并debug,这东西用了以后就知道自己错过了啥)
 记住%pylab ... 这命令,这样图片之类的直接显示在网页里

fabric(控制多个服务器、方便安装、更改设置、开关某service、等等)
nose、mock、coverage(testing类)

gevent、eventlet(千万别用python自带的多线程库)
 gevent还有从外hijack thread这个debug功能
 别忘了monkey.patch(),哈哈

multiprocessing(必要使用多个处理器、还蛮有必要)
pypy/psyco/cython/ctypes/cffi etc.(理解这些很有必要,有时候还真的需要跟C兼容或加速)
celery、luigi(同时进行多个process任务,任务之间需要沟通更方便管理)

logging
argparse(上面有人推荐docopt更好)


2)数据处理类:

numpy (千万别低估啊,谁缺少这个真的什么都干不好)

还有一些在numpy基础上的:

pillow/gd(图片数据类,还有不少图片处理功能)
matplotlib(把各种东西简单显示渲染出来)
pandas(处理复杂数据、转化或合并数据等等。用了以后就不会再import csv之类的)
scipy(统计类,也不少图片处理、优化等功能)
sklearn(机器学习,好方便)
(theano、tensorflow这些也很有名,只是还没用过,还有个有名的OCR库忘了名字)

nltk、pattern(更多语言处理工具)
pyopencl、pyopengl、pycuda(这些能让numpy做复杂任务更加强更快,利用GPU)


3)网络类:

requests(python内带的http/url等库很烦人)
django、flask、twisted(以及其他web framework,比如Zope、Button、Webapp就不说了)
(django、flask下面还有很多小库,比如messages和websocket。太多了,不说了)
pika皮卡丘(不同服务器不同程序之间的沟通大大简化)
pyzmq(也类似,更简单一些,功能比较有限,不过还能直接调用远程python函数-rpc)
sqlalchemy、pymongo、pycouch(还有好多较为方便的数据库累的)

各种google api
 特别是appengine、compute engine api,还有maps/places/search api
 还有谷歌的pipeline、mapreduce之类的、google docs那个编辑远程表格的也不错

爬虫方面也不少有用的库,比如beautifulsoup、scrapy。
还有mechanize这种自动控制多个浏览器做事的库,利用浏览器引擎等。


4)其他:

TK, WX, QT(做界面)
pyglet、pygame、等(更好处理多个界面,各令块渲染,渲染频率,这些)
geopy、shapely、gdal、geos、pyproj(地图处理,可能还有些,早就忘了)
 但是数据库一定要选择PostGIS

arrow、pendulum(python内带的datetime处理太弱了)
py2exe类(把代码直接编译成executable,所有人能运行)
simplejson(更快)
pyyaml(相对json,更好写,呵呵)
joblib(比那个pickle好太多了,直接把某object存到硬盘等)
tqdm(在命令行显示progress进度,超简单)

暂时想不到更多,不好意思。
编辑于 2016-08-28

发现居然没人提lxml

pip install lxml之后可以用lxml提供的xpath解析器来解析HTML。xpath是一套标准的HTML DOM查询语法,再不用Beaultiful Soup4那么罗嗦又不好维护的语法了。而且最棒的是你可以直接从Firefox或者Chrome的development tool里复制某个DOM元素的xpath路径。

其他不论,光lxml使用C实现的代码,效率上就比bs4高很多。用过之后再也不想去用bs4了
编辑于 2014-07-28

最近真是新出现了不少增长迅猛的 Python 库啊,在这里推荐 5 个值得在 2018 年关注的库,各个领域精选了 1 个,看看有没有你没听过的?


Web 领域:Sanic

哪些 Python 库让你相见恨晚?_第5张图片 channelcat/sanicgithub.com哪些 Python 库让你相见恨晚?_第6张图片

这个库的名字和之前一个很火的梗有关,有人在 youtube 上画 Sonic 那个蓝色小人,结果一本正经的画出了下面这货,给它起名叫 Sanic,还配了一句话是 Gotta go faster.

哪些 Python 库让你相见恨晚?_第7张图片

这个库和 Flask 类似,但是比它快很多,速度能在测试中达到每秒 36000 次请求。在2017年的 Star 增长数几乎是翻了一倍。Gotta go faster!


环境与包管理:Pipenv

哪些 Python 库让你相见恨晚?_第8张图片 pypa/pipenvgithub.com哪些 Python 库让你相见恨晚?_第9张图片

这个库相当于是环境管理和包管理二合一,由 Kenneth Reitz (Requests 的作者 )编写,现在移交给 Python 官方来维护,提供比 pip 体验更好的开发包管理。它的 Slogon 是Python Development Workflow for Humans,用来解决各种环境不一致、安装包的问题。


爬虫:Requestium

哪些 Python 库让你相见恨晚?_第10张图片 tryolabs/requestiumgithub.com哪些 Python 库让你相见恨晚?_第11张图片

现在反爬虫技术越来越厉害,常见的请求 + 解析爬虫随着频率变大和前端开发的复杂化变得并不是那么奏效。Requestium 的好处是,结合了 Chrome 59 以后的 headless 无头特性(代替了 phantomjs)。虽然效率稍微低一点,但是稳,前端渲染的网页也可以爬取解析。是 Requests, Selenium 和 Parsel 的结合体。


深度学习:Caffe2

哪些 Python 库让你相见恨晚?_第12张图片 caffe2/caffe2github.com哪些 Python 库让你相见恨晚?_第13张图片

是一个深度学习的库,优势是它是由 Facebook 团队来维护的。可能深度学习方面大家听得最多的是 Tensorflow,但 Caffe2 学习起来更简单轻量,并且它的背景能支持它有一个健壮的发展。


文本处理:FlashText

哪些 Python 库让你相见恨晚?_第14张图片 vi3k6i5/flashtextgithub.com哪些 Python 库让你相见恨晚?_第15张图片

这个库的开发者在 medium 上发了一篇文章,标题是:Regex was taking 5 days to run. So I built a tool that did it in 15 minutes. (正则要花5天时间才能完成,所以我做了个工具在15分钟内搞定)。这个库可以快速进行大规模语料库的文本搜索与替换。当关键词数量>500 的时候,FlashText 的搜索速度开始超过正则。


先写这么多,如果大家喜欢,之后再持续更新这篇精选集。


如果你看别的 Python 教程看不懂、学不会,那你可以试试 让小白学上瘾的编程入门课-麻瓜编程

编辑于 2018-01-03

大家都在贴 github 上的 awesome,一点个人感受和诚意都没有。

我就说两个:

1. requests:在没有用 requests 之前,用 urlib 发一个 post 请求无法理解,更不说提交一个文件了。
2. supervisord:当然不算是一个库,一个运维工具,好用。
发布于 2016-09-27
$ you-get http://tv.sohu.com/20141115/n406064831.shtml
you-get!
YouTube/优酷/土豆/搜狐/bilibili
给网址就下视频啊! 太好用了, 有木有
哪些 Python 库让你相见恨晚?_第16张图片
$ pip install you-get
发布于 2016-03-23
requests
发布于 2014-07-23
awesome-web-scraping 中文版
本文由 伯乐在线 - LynnShaw 翻译,赖信涛 校稿。未经许可,禁止转载!
英文出处:Gregory Petukhov。欢迎加入翻译组。

这个列表包含与网页抓取和数据处理的Python库

网络
  • 通用
    • urllib -网络库(stdlib)。
    • requests -网络库。
    • grab – 网络库(基于pycurl)。
    • pycurl – 网络库(绑定libcurl)。
    • urllib3 – Python HTTP库,安全连接池、支持文件post、可用性高。
    • httplib2 – 网络库。
    • RoboBrowser – 一个简单的、极具Python风格的Python库,无需独立的浏览器即可浏览网页。
    • MechanicalSoup -一个与网站自动交互Python库。
    • mechanize -有状态、可编程的Web浏览库。
    • socket – 底层网络接口(stdlib)。
    • Unirest for Python – Unirest是一套可用于多种语言的轻量级的HTTP库。
    • hyper – Python的HTTP/2客户端。
    • PySocks – SocksiPy更新并积极维护的版本,包括错误修复和一些其他的特征。作为socket模块的直接替换。
  • 异步
    • treq – 类似于requests的API(基于twisted)。
    • aiohttp – asyncio的HTTP客户端/服务器(PEP-3156)。
网络爬虫框架
  • 功能齐全的爬虫
    • grab – 网络爬虫框架(基于pycurl/multicur)。
    • scrapy – 网络爬虫框架(基于twisted),不支持Python3。
    • pyspider – 一个强大的爬虫系统。
    • cola – 一个分布式爬虫框架。
  • 其他
    • portia – 基于Scrapy的可视化爬虫。
    • restkit – Python的HTTP资源工具包。它可以让你轻松地访问HTTP资源,并围绕它建立的对象。
    • demiurge – 基于PyQuery的爬虫微框架。
HTML/XML解析器
  • 通用
    • lxml – C语言编写高效HTML/ XML处理库。支持XPath。
    • cssselect – 解析DOM树和CSS选择器。
    • pyquery – 解析DOM树和jQuery选择器。
    • BeautifulSoup – 低效HTML/ XML处理库,纯Python实现。
    • html5lib – 根据WHATWG规范生成HTML/ XML文档的DOM。该规范被用在现在所有的浏览器上。
    • feedparser – 解析RSS/ATOM feeds。
    • MarkupSafe – 为XML/HTML/XHTML提供了安全转义的字符串。
    • xmltodict – 一个可以让你在处理XML时感觉像在处理JSON一样的Python模块。
    • xhtml2pdf – 将HTML/CSS转换为PDF。
    • untangle – 轻松实现将XML文件转换为Python对象。
  • 清理
    • Bleach – 清理HTML(需要html5lib)。
    • sanitize – 为混乱的数据世界带来清明。
文本处理

用于解析和操作简单文本的库。

  • 通用
    • difflib – (Python标准库)帮助进行差异化比较。
    • Levenshtein – 快速计算Levenshtein距离和字符串相似度。
    • fuzzywuzzy – 模糊字符串匹配。
    • esmre – 正则表达式加速器。
    • ftfy – 自动整理Unicode文本,减少碎片化。
  • 转换
    • unidecode – 将Unicode文本转为ASCII。
  • 字符编码
    • uniout – 打印可读字符,而不是被转义的字符串。
    • chardet – 兼容 Python的2/3的字符编码器。
    • xpinyin – 一个将中国汉字转为拼音的库。
    • pangu.py – 格式化文本中CJK和字母数字的间距。
  • Slug化
    • awesome-slugify – 一个可以保留unicode的Python slugify库。
    • python-slugify – 一个可以将Unicode转为ASCII的Python slugify库。
    • unicode-slugify – 一个可以将生成Unicode slugs的工具。
    • pytils – 处理俄语字符串的简单工具(包括pytils.translit.slugify)。

  • 通用解析器
    • PLY – lex和yacc解析工具的Python实现。
    • pyparsing – 一个通用框架的生成语法分析器。
  • 人的名字
    • python-nameparser -解析人的名字的组件。
  • 电话号码
    • phonenumbers -解析,格式化,存储和验证国际电话号码。
  • 用户代理字符串
    • python-user-agents – 浏览器用户代理的解析器。
    • HTTP Agent Parser – Python的HTTP代理分析器。
特定格式文件处理

解析和处理特定文本格式的库。

  • 通用
    • tablib – 一个把数据导出为XLS、CSV、JSON、YAML等格式的模块。
    • textract – 从各种文件中提取文本,比如 Word、PowerPoint、PDF等。
    • messytables – 解析混乱的表格数据的工具。
    • rows – 一个常用数据接口,支持的格式很多(目前支持CSV,HTML,XLS,TXT – 将来还会提供更多!)。
  • Office
    • python-docx – 读取,查询和修改的Microsoft Word2007/2008的docx文件。
    • xlwt / xlrd – 从Excel文件读取写入数据和格式信息。
    • XlsxWriter – 一个创建Excel.xlsx文件的Python模块。
    • xlwings – 一个BSD许可的库,可以很容易地在Excel中调用Python,反之亦然。
    • openpyxl – 一个用于读取和写入的Excel2010 XLSX/ XLSM/ xltx/ XLTM文件的库。
    • Marmir – 提取Python数据结构并将其转换为电子表格。
  • PDF
    • PDFMiner – 一个从PDF文档中提取信息的工具。
    • PyPDF2 – 一个能够分割、合并和转换PDF页面的库。
    • ReportLab – 允许快速创建丰富的PDF文档。
    • pdftables – 直接从PDF文件中提取表格。
  • Markdown
    • Python-Markdown – 一个用Python实现的John Gruber的Markdown。
    • Mistune – 速度最快,功能全面的Markdown纯Python解析器。
    • markdown2 – 一个完全用Python实现的快速的Markdown。

  • YAML
    • PyYAML – 一个Python的YAML解析器。
  • CSS
    • cssutils – 一个Python的CSS库。
  • ATOM/RSS
    • feedparser – 通用的feed解析器。
  • SQL
    • sqlparse – 一个非验证的SQL语句分析器。

  • HTTP
    • http-parser – C语言实现的HTTP请求/响应消息解析器。
  • 微格式
    • opengraph – 一个用来解析Open Graph协议标签的Python模块。
  • 可移植的执行体
    • pefile – 一个多平台的用于解析和处理可移植执行体(即PE)文件的模块。
  • PSD
    • psd-tools – 将Adobe Photoshop PSD(即PE)文件读取到Python数据结构。
自然语言处理

处理人类语言问题的库。

  • NLTK -编写Python程序来处理人类语言数据的最好平台。
  • Pattern – Python的网络挖掘模块。他有自然语言处理工具,机器学习以及其它。
  • TextBlob – 为深入自然语言处理任务提供了一致的API。是基于NLTK以及Pattern的巨人之肩上发展的。
  • jieba – 中文分词工具。
  • SnowNLP – 中文文本处理库。
  • loso – 另一个中文分词库。
  • genius – 基于条件随机域的中文分词。
  • langid.py – 独立的语言识别系统。
  • Korean – 一个韩文形态库。
  • pymorphy2 – 俄语形态分析器(词性标注+词形变化引擎)。
  • PyPLN – 用Python编写的分布式自然语言处理通道。这个项目的目标是创建一种简单的方法使用NLTK通过网络接口处理大语言库。
浏览器自动化与仿真
  • selenium – 自动化真正的浏览器(Chrome浏览器,火狐浏览器,Opera浏览器,IE浏览器)。
  • Ghost.py – 对PyQt的webkit的封装(需要PyQT)。
  • Spynner – 对PyQt的webkit的封装(需要PyQT)。
  • Splinter – 通用API浏览器模拟器(selenium web驱动,Django客户端,Zope)。
多重处理
  • threading – Python标准库的线程运行。对于I/O密集型任务很有效。对于CPU绑定的任务没用,因为python GIL。
  • multiprocessing – 标准的Python库运行多进程。
  • celery – 基于分布式消息传递的异步任务队列/作业队列。
  • concurrent-futures – concurrent-futures 模块为调用异步执行提供了一个高层次的接口。
异步

异步网络编程库

  • asyncio – (在Python 3.4 +版本以上的 Python标准库)异步I/O,时间循环,协同程序和任务。
  • Twisted – 基于事件驱动的网络引擎框架。
  • Tornado – 一个网络框架和异步网络库。
  • pulsar – Python事件驱动的并发框架。
  • diesel – Python的基于绿色事件的I/O框架。
  • gevent – 一个使用greenlet 的基于协程的Python网络库。
  • eventlet – 有WSGI支持的异步框架。
  • Tomorrow – 异步代码的奇妙的修饰语法。
队列
  • celery – 基于分布式消息传递的异步任务队列/作业队列。
  • huey – 小型多线程任务队列。
  • mrq – Mr. Queue – 使用redis & Gevent 的Python分布式工作任务队列。
  • RQ – 基于Redis的轻量级任务队列管理器。
  • simpleq – 一个简单的,可无限扩展,基于Amazon SQS的队列。
  • python-gearman – Gearman的Python API。
云计算
  • picloud – 云端执行Python代码。
  • dominoup.com – 云端执行R,Python和matlab代码。
电子邮件

电子邮件解析库

  • flanker – 电子邮件地址和Mime解析库。
  • Talon – Mailgun库用于提取消息的报价和签名。
网址和网络地址操作

解析/修改网址和网络地址库。

  • URL
    • furl – 一个小的Python库,使得操纵URL简单化。
    • purl – 一个简单的不可改变的URL以及一个干净的用于调试和操作的API。
    • urllib.parse – 用于打破统一资源定位器(URL)的字符串在组件(寻址方案,网络位置,路径等)之间的隔断,为了结合组件到一个URL字符串,并将“相对URL”转化为一个绝对URL,称之为“基本URL”。
    • tldextract – 从URL的注册域和子域中准确分离TLD,使用公共后缀列表。
  • 网络地址
    • netaddr – 用于显示和操纵网络地址的Python库。
网页内容提取

提取网页内容的库。

  • HTML页面的文本和元数据
    • newspaper – 用Python进行新闻提取、文章提取和内容策展。
    • html2text – 将HTML转为Markdown格式文本。
    • python-goose – HTML内容/文章提取器。
    • lassie – 人性化的网页内容检索工具
    • micawber – 一个从网址中提取丰富内容的小库。
    • sumy -一个自动汇总文本文件和HTML网页的模块
    • Haul – 一个可扩展的图像爬虫。
    • python-readability – arc90 readability工具的快速Python接口。
    • scrapely – 从HTML网页中提取结构化数据的库。给出了一些Web页面和数据提取的示例,scrapely为所有类似的网页构建一个分析器。
  • 视频
    • youtube-dl – 一个从YouTube下载视频的小命令行程序。
    • you-get – Python3的YouTube、优酷/ Niconico视频下载器。
  • 维基
    • WikiTeam – 下载和保存wikis的工具。
WebSocket

用于WebSocket的库。

  • Crossbar – 开源的应用消息传递路由器(Python实现的用于Autobahn的WebSocket和WAMP)。
  • AutobahnPython – 提供了WebSocket协议和WAMP协议的Python实现并且开源。
  • WebSocket-for-Python – Python 2和3以及PyPy的WebSocket客户端和服务器库。
DNS解析
  • dnsyo – 在全球超过1500个的DNS服务器上检查你的DNS。
  • pycares – c-ares的接口。c-ares是进行DNS请求和异步名称决议的C语言库。
计算机视觉
  • OpenCV – 开源计算机视觉库。
  • SimpleCV – 用于照相机、图像处理、特征提取、格式转换的简介,可读性强的接口(基于OpenCV)。
  • mahotas – 快速计算机图像处理算法(完全使用 C++ 实现),完全基于 numpy 的数组作为它的数据类型。
其他Python工具列表
  • awesome-python
  • pycrumbs
  • python-github-projects
  • python_reference
  • pythonidae


你可能感兴趣的:(Python学习)