From 52979b4b50956450694e2e35eade945417ad8db1 Mon Sep 17 00:00:00 2001 From: polyval Date: Sun, 3 Apr 2016 20:26:15 +0800 Subject: [PATCH 001/143] add resources to learning guide section --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d1c81dc..8ff13cb 100644 --- a/README.md +++ b/README.md @@ -1147,6 +1147,7 @@ Python 实现的算法和设计模式。 * [python-patterns](http://hao.jobbole.com/python-patterns/):使用python实现设计模式。[官网](https://github.com/faif/python-patterns) * [Projects](http://hao.jobbole.com/python-projects/):Python项目大集合。[官网](https://github.com/karan/Projects) * [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的Python学习指南。[官网](http://docs.python-guide.org/en/latest/) +* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像Python高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html)

知名网站

*值得关注的 Python 技术站点。* From 3fc9a7573f1fed0a071985b637b4a677a1364575 Mon Sep 17 00:00:00 2001 From: ReadmeCritic Date: Mon, 4 Apr 2016 08:11:58 -0700 Subject: [PATCH 002/143] Update README URLs based on HTTP redirects --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index d1c81dc..081bd1f 100644 --- a/README.md +++ b/README.md @@ -83,8 +83,8 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * buildout:一个构建系统,从多个组件来创建,组装和部署应用。[官网](http://www.buildout.org/) * BitBake:针对嵌入式 Linux 的类似 make 的构建工具。[官网](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html) -* fabricate:对任何语言自动找到依赖关系的构建工具。[官网](https://code.google.com/p/fabricate/) -* PlatformIO:多平台命令行构建工具。[官网](https://github.com/ivankravets/platformio) +* fabricate:对任何语言自动找到依赖关系的构建工具。[官网](https://code.google.com/archive/p/fabricate) +* PlatformIO:多平台命令行构建工具。[官网](https://github.com/platformio/platformio) * PyBuilder:纯 Python 实现的持续化构建工具。[官网](https://github.com/pybuilder/pybuilder) * SCons:软件构建工具。[官网](http://www.scons.org/) @@ -117,7 +117,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) * delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) * moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。[官网](https://github.com/zachwill/moment) -* PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shnode/PyTime) +* PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) * pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。[官网](https://launchpad.net/pytz) * when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) @@ -175,7 +175,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * YAML * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) * CSV - * csvkit:用于转换和操作 CSV 的工具。[官网](https://github.com/onyxfish/csvkit) + * csvkit:用于转换和操作 CSV 的工具。[官网](https://github.com/wireservice/csvkit) * Archive * unp:一个用来方便解包归档文件的命令行工具。[官网](https://github.com/mitsuhiko/unp) @@ -224,7 +224,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * docopt:Python 风格的命令行参数解析器。[官网](http://docopt.org/) * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) - * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](http://github.com/Russell91/pythonpy/wiki) + * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](https://github.com/Russell91/pythonpy/wiki) * 生产力工具 * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) @@ -255,7 +255,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pillow:Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) * hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) -* imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](http://sourceforge.net/projects/imgseek/) +* imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) * nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) * pyBarcode:不借助 PIL 库在 Python 程序中生成条形码。[官网](https://pythonhosted.org/pyBarcode/) * pygram:类似 Instagram 的图像滤镜。[官网](https://github.com/ajkumar25/pygram) @@ -335,7 +335,7 @@ Python实现的数据库。 用来连接和操作数据库的库。 * ySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 - * mysql-python:Python 的 MySQL 数据库连接器。[官网](http://sourceforge.net/projects/mysql-python/) + * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) * PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。[官网](https://github.com/PyMySQL/PyMySQL) @@ -479,9 +479,9 @@ Python实现的数据库。 模板生成和词法解析的库和工具。 -* Jinja2:一个现代的,对设计师友好的模板引擎。[官网](https://github.com/mitsuhiko/jinja2) +* Jinja2:一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) * Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) -* Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](http://genshi.edgewall.org/) +* Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) * Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) ### Queue @@ -548,7 +548,7 @@ Python实现的数据库。 * inbox:一个开源电子邮件工具箱。[官网](https://github.com/nylas/sync-engine) * lamson:Python 风格的 SMTP 应用服务器。[官网](https://github.com/zedshaw/lamson) * mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。[官网](https://github.com/WoLpH/mailjet) -* marrow.mailer:高性能可扩展邮件分发框架。[官网](https://github.com/marrow/marrow.mailer) +* marrow.mailer:高性能可扩展邮件分发框架。[官网](https://github.com/marrow/mailer) * modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。[官网](https://github.com/tonioo/modoboa) * pyzmail:创建,发送和解析电子邮件。[官网](http://www.magiksys.net/pyzmail/) * Talon:Mailgun 库,用来抽取信息和签名。[官网](https://github.com/mailgun/talon) @@ -579,7 +579,7 @@ Python实现的数据库。 * cssutils:一个 Python 的 CSS 库。[官网](https://pypi.python.org/pypi/cssutils/) * html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。[官网](https://github.com/html5lib/html5lib-python) * lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) -* MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/mitsuhiko/markupsafe) +* MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) * pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) * untangle:将XML文档转换为Python对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) * xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) @@ -769,7 +769,7 @@ Python实现的数据库。 * PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。[官网](http://www.ogre3d.org/tikiwiki/PyOgre) * PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。[官网](http://pyopengl.sourceforge.net/) * PySDL2:SDL2 库的封装,基于 ctypes。[官网](http://pysdl2.readthedocs.org/en/latest/) -* RenPy:一个视觉小说(visual novel)引擎。[官网](http://www.renpy.org/) +* RenPy:一个视觉小说(visual novel)引擎。[官网](https://www.renpy.org/) ### 日志 @@ -833,7 +833,7 @@ Python实现的数据库。 * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) * Lint工具 * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) - * Pylint:一个完全可定制的源码分析器。[官网](http://www.pylint.org/) + * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) ### Debugging Tools @@ -872,7 +872,7 @@ Python实现的数据库。 * Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) * [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) * Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) -* Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/avelino/mining) +* Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) * orange:通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) * Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) * PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) @@ -949,7 +949,7 @@ MapReduce 框架和库。 * apache-libcloud:一个为各种云设计的 Python 库。[官网](https://libcloud.apache.org/) * boto:Amazon Web Services 的 Python 接口。[官网](https://github.com/boto/boto) * django-wordpress:WordPress models and views for Django.[官网](https://github.com/sunlightlabs/django-wordpress/) -* facebook-sdk:Facebook 平台的 Python SDK.[官网](https://github.com/pythonforfacebook/facebook-sdk) +* facebook-sdk:Facebook 平台的 Python SDK.[官网](https://github.com/mobolic/facebook-sdk) * facepy:Facepy 让和 Facebook's Graph API 的交互变得更容易。[官网](https://github.com/jgorset/facepy) * gmail:Gmail 的 Python 接口。[官网](https://github.com/charlierguo/gmail) * google-api-python-client:Python 用的 Google APIs 客户端库。[官网](https://github.com/google/google-api-python-client) @@ -1014,7 +1014,7 @@ MapReduce 框架和库。 * Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。[官网](http://python-xy.github.io/) * pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。[官网](http://www.lfd.uci.edu/~gohlke/pythonlibs/) * PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。[官网](https://github.com/pythonnet/pythonnet) -* PyWin32:针对 Windows 的Python 扩展。[官网](http://sourceforge.net/projects/pywin32/) +* PyWin32:针对 Windows 的Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) * WinPython:Windows 7/8 系统下便携式开发环境。[官网](https://winpython.github.io/) ### 网络可视化和SDN @@ -1050,7 +1050,7 @@ MapReduce 框架和库。 不属于上面任何一个类别,但是非常有用的库。 * blinker:一个快速的 Python 进程内信号/事件分发系统。[官网](https://github.com/jek/blinker) -* itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/mitsuhiko/itsdangerous) +* itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) * pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) * Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) * Tryton:一个通用商务框架。[官网](http://www.tryton.org/) From 3b9c6d9e1214807a7800474b9afac3bacbe7e2f1 Mon Sep 17 00:00:00 2001 From: Lingfeng Date: Sat, 9 Apr 2016 10:12:39 +0800 Subject: [PATCH 003/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63af727..a2bf1fb 100644 --- a/README.md +++ b/README.md @@ -385,7 +385,7 @@ Python实现的数据库。 * [Django](https://www.djangoproject.com/) - Python 界最流行的 web 框架。 * [awesome-django](https://github.com/rosarior/awesome-django)系列 * [Flask](http://flask.pocoo.org/) - 一个 Python 微型框架。 - * [awesome-flask](https://github.com/rosarior/awesome-django)系列 + * [awesome-flask](https://github.com/humiaozuzu/awesome-flask)系列 * Pyramid - 一个小巧,快速,接地气的开源Python web 框架。 * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid)系列 * [Bottle](http://bottlepy.org/docs/dev/index.html) - 一个快速小巧,轻量级的 WSGI 微型 web 框架。 From 2bf562499f10c1f41a5356d97917dc6fc5a84e25 Mon Sep 17 00:00:00 2001 From: zesov Date: Mon, 23 May 2016 17:05:40 +0800 Subject: [PATCH 004/143] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6e99a2c..e725bca 100644 --- a/README.md +++ b/README.md @@ -418,6 +418,7 @@ Python实现的数据库。 内容管理系统 +* odoo-cms: 一个开源的,企业级 CMS,基于odoo。[官网](http://www.odoo.com) * django-cms:一个开源的,企业级 CMS,基于 Django。[官网](http://www.django-cms.org/en/) * djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。[官网](http://djedi-cms.org/) * FeinCMS:基于 Django 构建的最先进的内容管理系统之一。[官网](http://www.feincms.org/) From 0a98df859f34f19f97d6b43bdf9c1576ab506ac9 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 8 Jun 2016 22:22:34 +0800 Subject: [PATCH 005/143] and PR process and update SimpleCV detail link --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6e99a2c..13d58f0 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,19 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * * * +### 如何为列表贡献新资源? + +欢迎大家为列表贡献高质量的新资源,提交PR时请参照以下要求: + +* 请确保推荐的资源自己使用过 +* 提交PR时请注明推荐理由 + +资源列表管理收到PR请求后,会定期(每周)在微博转发本周提交的PR列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 + +感谢您的贡献! + +* * * + ### 本项目的参与者 - 维护者: @@ -913,7 +926,7 @@ Python实现的数据库。 计算机视觉库。 * OpenCV:开源计算机视觉库。[官网](http://opencv.org/) -* SimpleCV:一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) +* [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) ### 机器学习 From 7e5da2003f74420c84c6e13002113f33d2376987 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Fri, 24 Jun 2016 21:47:54 +0800 Subject: [PATCH 006/143] update xlwt, pytesseract detail link and add contributor beyondwu --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 13d58f0..8913fa5 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/) 注:名单不分排名,不定期补充更新 @@ -186,7 +186,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) - * xlwt:读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) + * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) * relatorio:模板化OpenDocument 文件。[官网](http://relatorio.tryton.org/) * PDF * PDFMiner:一个用于从PDF文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) @@ -293,7 +293,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 光学字符识别库。 * pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) -* pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) +* [pytesseract](http://hao.jobbole.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) * python-tesseract - [Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 ### 音频 From d16fac5e2f77fc5fa853755cbcb7f9bfb0af22fd Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sun, 3 Jul 2016 09:23:44 +0800 Subject: [PATCH 007/143] update YouCompleteMe detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8913fa5..05392dd 100644 --- a/README.md +++ b/README.md @@ -1096,7 +1096,7 @@ Python 实现的算法和设计模式。 * SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。[官网](https://github.com/srusskih/SublimeJEDI) * Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。[官网](https://github.com/DamnWidget/anaconda) * Vim - * YouCompleteMe:引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) + * [YouCompleteMe](http://hao.jobbole.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) * Visual Studio From c1d52d77100c9b493221c7ba8e23ca5679afd062 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sun, 10 Jul 2016 11:45:32 +0800 Subject: [PATCH 008/143] update python-recsys detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 737791b..9292f3c 100644 --- a/README.md +++ b/README.md @@ -940,7 +940,7 @@ Python实现的数据库。 * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) * PyBrain:另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) * Pylearn2:一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) -* python-recsys:一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) +* [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) * scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) From 0c5129b4823c1bc69ebff6984e0381b86ae8bd8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B9=BF=E8=83=9C?= Date: Wed, 13 Jul 2016 17:39:15 +0800 Subject: [PATCH 009/143] add Markdown - Python Markdown2 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9292f3c..39f6770 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Markdown * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) + * Python-Markdiwn2: 纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) * YAML * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) * CSV From b1ba965f7035c69a71ff0265ba4fab08242b9a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B9=BF=E8=83=9C?= Date: Wed, 13 Jul 2016 17:41:34 +0800 Subject: [PATCH 010/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39f6770..0546bfe 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Markdown * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) - * Python-Markdiwn2: 纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) + * Python-Markdiwn2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) * YAML * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) * CSV From c4f1560a44e70dec5e87e63019373ec5bfc869d4 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 19 Jul 2016 08:50:51 +0800 Subject: [PATCH 011/143] update chardet detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9292f3c..cc881cc 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用于解析和操作文本的库。 * 通用 - * chardet:字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) + * [chardet](http://hao.jobbole.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) * ftfy:让Unicode文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) From 4f36dfc786422747443d76300c714add90510886 Mon Sep 17 00:00:00 2001 From: cissoid Date: Thu, 21 Jul 2016 11:13:41 +0800 Subject: [PATCH 012/143] Add, autopep8. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index cc881cc..09beb7b 100644 --- a/README.md +++ b/README.md @@ -859,6 +859,8 @@ Python实现的数据库。 * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) +* 代码格式化 + * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) ### Debugging Tools From a61beaf31891c0e134f724c0f03a2cb4a916ce4e Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 26 Jul 2016 09:22:45 +0800 Subject: [PATCH 013/143] update Jinja2 detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc881cc..77271af 100644 --- a/README.md +++ b/README.md @@ -503,7 +503,7 @@ Python实现的数据库。 模板生成和词法解析的库和工具。 -* Jinja2:一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) +* [Jinja2](http://hao.jobbole.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) * Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) * Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) * Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) From 85b3a02686ead366bf46accbebd08e0a154a1792 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 26 Jul 2016 20:23:56 +0800 Subject: [PATCH 014/143] =?UTF-8?q?add=20contributor=20cissoid,=20?= =?UTF-8?q?=E6=9D=8E=E5=B9=BF=E8=83=9C=20and=20polyval?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f1f00e..56f8917 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval) 注:名单不分排名,不定期补充更新 From 67409cb0b81edba64d0600831e5400a52ef2df0f Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 2 Aug 2016 12:07:59 +0800 Subject: [PATCH 015/143] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充了《值得关注的 10 个 Python 英文博客》 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56f8917..2f895f6 100644 --- a/README.md +++ b/README.md @@ -1185,7 +1185,7 @@ Python 实现的算法和设计模式。

英文站点

-待补充 +* 《[值得关注的 10 个 Python 英文博客](http://python.jobbole.com/81730/)》

微博、微信公众号

* Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) From 810a89d02ca2a2ac7c688ff8e8066849ef3776f1 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 9 Aug 2016 11:02:34 +0800 Subject: [PATCH 016/143] update Twisted detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f895f6..145f21e 100644 --- a/README.md +++ b/README.md @@ -720,7 +720,7 @@ Python实现的数据库。 用于网络编程的库。 * asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) -* Twisted:一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) +* [Twisted](http://hao.jobbole.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) * pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) * diesel:基于Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) * pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) From 3f464ce441b517ed75991a3487c8a14b7e6a3ee2 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 25 Aug 2016 09:35:32 +0800 Subject: [PATCH 017/143] update Peewee detail link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 145f21e..8b2571f 100644 --- a/README.md +++ b/README.md @@ -390,7 +390,7 @@ Python实现的数据库。 * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy)系列 - * Peewee:一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) + * [Peewee](http://hao.jobbole.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) * NoSQL 数据库 From 9242f649c0d36ff36ac46c75b097f326062fab2a Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Mon, 29 Aug 2016 17:17:23 +0800 Subject: [PATCH 018/143] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 别字改错 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b2571f..26c033e 100644 --- a/README.md +++ b/README.md @@ -474,7 +474,7 @@ Python实现的数据库。 * Pyramid * cornice:一个Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) * 与框架无关的 - * falcon:一个用来建立云 API 和 web app 后端的噶性能框架。[官网](http://falconframework.org/) + * falcon:一个用来建立云 API 和 web app 后端的高性能框架。[官网](http://falconframework.org/) * sandman:为现存的数据库驱动系统自动创建 REST APIs 。[官网](https://github.com/jeffknupp/sandman) * restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。[官网](http://restless.readthedocs.org/en/latest/) * ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。[官网](https://github.com/vertical-knowledge/ripozo) From 610634dde1f1684006ce028d9c3d855ee63d51cb Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Mon, 29 Aug 2016 17:25:45 +0800 Subject: [PATCH 019/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b2571f..81cc1fd 100644 --- a/README.md +++ b/README.md @@ -813,7 +813,7 @@ Python实现的数据库。 * 测试框架 * unittest:(Python 标准库) 单元测试框架。[官网](https://docs.python.org/2/library/unittest.html) * nose:nose 扩展了 unittest 的功能。[官网](https://nose.readthedocs.org/en/latest/) - * contexts:一个 Python 3.3+ 的 BDD 框架。受到C# + * contexts:一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。[官网](https://github.com/benjamin-hodgson/Contexts) * hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。[官网](https://github.com/DRMacIver/hypothesis) * mamba:Python 的终极测试工具, 拥护BDD。[官网](http://nestorsalceda.github.io/mamba/) * PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。[官网](https://github.com/asweigart/pyautogui) From d37df73745cde944584696c1274bc67cfbf98d22 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 12 Sep 2016 07:36:39 +0800 Subject: [PATCH 020/143] update orange url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a773f80..4a127a5 100644 --- a/README.md +++ b/README.md @@ -900,7 +900,7 @@ Python实现的数据库。 * [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) * Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) * Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) -* orange:通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) +* [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) * Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) * PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) * PyMC:马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) From dab9d33f8da4d3b96b4e24eb399bab056997d462 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 20 Sep 2016 11:15:56 +0800 Subject: [PATCH 021/143] update PyBrain url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a127a5..fdfe07d 100644 --- a/README.md +++ b/README.md @@ -941,7 +941,7 @@ Python实现的数据库。 * hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) * NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) -* PyBrain:另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) +* [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) * Pylearn2:一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) * [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) * scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) From db005b29f7e156743f77a9e805974cdef46dc068 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 27 Sep 2016 11:48:21 +0800 Subject: [PATCH 022/143] add django-rest-framework url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fdfe07d..4d17e7b 100644 --- a/README.md +++ b/README.md @@ -462,7 +462,7 @@ Python实现的数据库。 用来开发RESTful APIs的库 * Django - * django-rest-framework:一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) + * [django-rest-framework](http://hao.jobbole.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) * django-tastypie:为Django 应用开发API。[官网](http://tastypieapi.org/) * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) * Flask From 32d33101f8e19f7a5ce54410384a0de7097e33e6 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 5 Oct 2016 13:45:32 +0800 Subject: [PATCH 023/143] =?UTF-8?q?add=20bjoern=20url=20and=20contributor?= =?UTF-8?q?=20=E5=86=B0=E6=96=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4d17e7b..fedb70b 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/) 注:名单不分排名,不定期补充更新 @@ -741,7 +741,7 @@ Python实现的数据库。 * gunicorn:Pre-forked, 部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/gunicorn) * uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。[官网](https://uwsgi-docs.readthedocs.org/en/latest/) -* bjoern:异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) +* [bjoern](http://hao.jobbole.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) * fapws3:异步 (仅对于网络端),由 C 语言编写。[官网](http://www.fapws.org/) * meinheld:异步,部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/meinheld) * netius:异步,非常快速。[官网](https://github.com/hivesolutions/netius) From 8b3bf28502f526327b8303362d98a0cd6bebfd0a Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 11 Oct 2016 22:04:16 +0800 Subject: [PATCH 024/143] add kivy url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fedb70b..db96b1f 100644 --- a/README.md +++ b/README.md @@ -773,7 +773,7 @@ Python实现的数据库。 * curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) * enaml:使用类似 QML 的Declaratic语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) -* kivy:一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。[官网](https://kivy.org/) +* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。[官网](https://kivy.org/) * pyglet:一个Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) * PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) * PySide:P跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4。[官网](https://wiki.qt.io/PySide) From b775865149690eb2f5122af4c255d6bafbb68238 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sat, 15 Oct 2016 22:19:47 +0800 Subject: [PATCH 025/143] add dpark url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db96b1f..0230ef1 100644 --- a/README.md +++ b/README.md @@ -953,7 +953,7 @@ Python实现的数据库。 MapReduce 框架和库。 -* dpark:Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) +* [dpark](http://hao.jobbole.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) * dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。[官网](https://github.com/klbostee/dumbo) * luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) * mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) From b5110f6e3bf20ae16ecf057e90be712fd821c019 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sun, 16 Oct 2016 20:34:19 +0800 Subject: [PATCH 026/143] add Bayesian-belief-networks --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0230ef1..e8f1f9f 100644 --- a/README.md +++ b/README.md @@ -909,6 +909,7 @@ Python实现的数据库。 * statsmodels:统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) +* [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) ### 数据可视化 From 79024487441741a2b659e353ffe800fcb5a8e933 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 17 Oct 2016 21:48:49 +0800 Subject: [PATCH 027/143] =?UTF-8?q?add=20blaze=20url=20and=20contributor?= =?UTF-8?q?=20=E8=B5=B5=E5=8F=B6=E5=AE=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e8f1f9f..af30e07 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/) 注:名单不分排名,不定期补充更新 @@ -892,7 +892,7 @@ Python实现的数据库。 * bcbio-nextgen:这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) * bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) * Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) -* blaze:NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) +* [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) * cclib:一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) * NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) * Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) From bc0b34161f5453739311779263a7c6a0eb7fd089 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 18 Oct 2016 22:25:04 +0800 Subject: [PATCH 028/143] add mrq url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index af30e07..b61d648 100644 --- a/README.md +++ b/README.md @@ -515,7 +515,7 @@ Python实现的数据库。 * celery:一个异步任务队列/作业队列,基于分布式消息传递。[官网](http://www.celeryproject.org/) * huey:小型多线程任务队列。[官网](https://github.com/coleifer/huey) -* mrq:Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) +* [mrq](http://hao.jobbole.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) * rq:简单的 Python 作业队列。[官网](http://python-rq.org/) * simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。[官网](https://github.com/rdegges/simpleq) From 4a5ab551c94375d10297c4256889b0e092ab7411 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 19 Oct 2016 22:09:45 +0800 Subject: [PATCH 029/143] =?UTF-8?q?add=20django-elastic-transcoder=20url?= =?UTF-8?q?=20and=20contributor=20=20=D0=BB=20stalgic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b61d648..9ec56a0 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/) 注:名单不分排名,不定期补充更新 @@ -305,7 +305,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) * beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具[官网](http://beets.io/) * dejavu:音频指纹提取和识别[官网](https://github.com/worldveil/dejavu) -* django-elastic-transcoder:Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) +* [django-elastic-transcoder](http://hao.jobbole.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) * eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) * id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) * m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) From de2dff3d7d411279a0ac7096e6e92d421df00fab Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 20 Oct 2016 21:43:03 +0800 Subject: [PATCH 030/143] =?UTF-8?q?add=20bpython=20url=20and=20contributor?= =?UTF-8?q?=20=E7=A1=95=E6=81=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9ec56a0..3871ff7 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/) 注:名单不分排名,不定期补充更新 @@ -116,7 +116,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 交互式 Python 解析器。 * IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) -* bpython:界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) +* [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) * ptpython:高级交互式Python解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) ### 文件 From b4c8f013a696f7d0bc77030da16add4a3422c5e1 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Fri, 21 Oct 2016 20:59:54 +0800 Subject: [PATCH 031/143] add Open Mining url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3871ff7..61514d2 100644 --- a/README.md +++ b/README.md @@ -899,7 +899,7 @@ Python实现的数据库。 * Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) * [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) * Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) -* Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) +* [Open Mining](http://hao.jobbole.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) * [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) * Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) * PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) From fb30d5b8a3543103046d8e6f3075617ec7ba925e Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 24 Oct 2016 21:57:36 +0800 Subject: [PATCH 032/143] add Memory Profiler url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 61514d2..bd15c38 100644 --- a/README.md +++ b/README.md @@ -878,7 +878,7 @@ Python实现的数据库。 * flask-debugtoolbar:django-debug-toolbar 的 flask 版。[官网](https://github.com/mgood/flask-debugtoolbar) * 性能分析器 * lineprofiler:逐行性能分析。[官网](https://github.com/rkern/lineprofiler) - * memoryprofiler:监控 Python 代码的内存使用。[官网](https://github.com/fabianp/memoryprofiler) + * [Memory Profiler](http://hao.jobbole.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) * profiling:一个交互式 Python 性能分析工具。[官网](https://github.com/what-studio/profiling) * 其他 * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) From af4afae5e4c72557b363d75f18f3b49878757953 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 24 Oct 2016 22:05:42 +0800 Subject: [PATCH 033/143] add simplejson url --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bd15c38..df4fba6 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) + * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) * Slug化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From b8706687ff555739f76ff705c42b9940fab56fe7 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 24 Oct 2016 22:06:10 +0800 Subject: [PATCH 034/143] Revert "add simplejson url" This reverts commit af4afae5e4c72557b363d75f18f3b49878757953. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index df4fba6..bd15c38 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,6 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) * Slug化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From 20b486d02001b07783de2112739c9c10affedac3 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 24 Oct 2016 22:06:48 +0800 Subject: [PATCH 035/143] add simplejson --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bd15c38..df4fba6 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) + * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) * Slug化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From c8e297402178794ba92b6b8efd3f8d42fd98f9b9 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sun, 30 Oct 2016 21:36:14 +0800 Subject: [PATCH 036/143] add cclib url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df4fba6..be22bb4 100644 --- a/README.md +++ b/README.md @@ -894,7 +894,7 @@ Python实现的数据库。 * bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) * Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) * [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) -* cclib:一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) +* [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) * NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) * Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) * Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) From 36b11517c6749123f653e2967cd5235b7927664a Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 7 Nov 2016 12:55:13 +0800 Subject: [PATCH 037/143] add Sphinx url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index be22bb4..513b059 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用以生成项目文档的库。 -* Sphinx:Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) +* [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) * MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) * pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) From 6a246d03e36a2c0fc73149a7b4893b3c7224a0a4 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 15 Nov 2016 15:43:17 +0800 Subject: [PATCH 038/143] add pillow url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 513b059..77f8c6e 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用来操作图像的库. -* pillow:Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) +* [pillow](http://hao.jobbole.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) * hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) * imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) * nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) From 246d363a08af45c6ac475070005b660c64bd038f Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 23 Nov 2016 16:29:02 +0800 Subject: [PATCH 039/143] add bcbio-nextgen url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77f8c6e..d5e9a29 100644 --- a/README.md +++ b/README.md @@ -890,7 +890,7 @@ Python实现的数据库。 用来进行科学计算和数据分析的库。 * astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) -* bcbio-nextgen:这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) +* [bcbio-nextgen](http://hao.jobbole.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) * bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) * Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) * [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) From 4605d18efc503947f29b45bafa96b481c77e45e4 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sun, 4 Dec 2016 16:13:13 +0800 Subject: [PATCH 040/143] add Pylearn2 url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5e9a29..a8cce32 100644 --- a/README.md +++ b/README.md @@ -944,7 +944,7 @@ Python实现的数据库。 * NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) * [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) -* Pylearn2:一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) +* [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) * [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) * scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) From a32e4fc7e173c18fbe156a9f3992aa78b5791ceb Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 8 Dec 2016 16:52:39 +0800 Subject: [PATCH 041/143] add statsmodels url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8cce32..612e59a 100644 --- a/README.md +++ b/README.md @@ -907,7 +907,7 @@ Python实现的数据库。 * PyMC:马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) * RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) * [SciPy](http://hao.jobbole.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) -* statsmodels:统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) +* [statsmodels](http://hao.jobbole.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) From 9b83708cbc67f9428f89339aa745806ab7b16af8 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 12 Dec 2016 15:05:44 +0800 Subject: [PATCH 042/143] add PyMC url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 612e59a..a6e2e6b 100644 --- a/README.md +++ b/README.md @@ -904,7 +904,7 @@ Python实现的数据库。 * [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) * Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) * PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) -* PyMC:马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) +* [PyMC](http://hao.jobbole.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) * RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) * [SciPy](http://hao.jobbole.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) * [statsmodels](http://hao.jobbole.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) From 07b1b636e82f7c686d27f5179f4b00f6bd39c7e0 Mon Sep 17 00:00:00 2001 From: filosfino Date: Wed, 14 Dec 2016 10:27:38 +0800 Subject: [PATCH 043/143] fix: typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a6e2e6b..1cd0e1c 100644 --- a/README.md +++ b/README.md @@ -359,7 +359,7 @@ Python实现的数据库。 用来连接和操作数据库的库。 -* ySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 +* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) From 329bec590e4d571d99965e5c88be2d5209531598 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 26 Dec 2016 21:43:04 +0800 Subject: [PATCH 044/143] add NLTK url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1cd0e1c..7a2f444 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用来处理人类语言的库。 -* NLTK:一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) +* [NLTK](http://hao.jobbole.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) * jieba:中文分词工具。[官网](https://github.com/fxsjy/jieba) * langid.py:独立的语言识别系统。[官网](https://github.com/saffsd/langid.py) * Pattern:Python 网络信息挖掘模块。[官网](http://www.clips.ua.ac.be/pattern) From 6a727473eb12fd28f4881a6546bbfb75e8050053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9B=A7=E5=9B=A7=E7=94=B7?= Date: Tue, 10 Jan 2017 10:23:48 +0800 Subject: [PATCH 045/143] add coala and Errbot Add coala and Errbot lib --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 7a2f444..bc8dc29 100644 --- a/README.md +++ b/README.md @@ -854,6 +854,7 @@ Python实现的数据库。 进行代码分析,解析和操作代码库的库和工具。 * 代码分析 + * coala:语言独立和易于扩展的代码分析应用程序。[官网](http://coala-analyzer.org/) * code2flow:把你的 Python 和 JavaScript 代码转换为流程图。[官网](https://github.com/scottrogowski/code2flow) * pycallgraph:这个库可以把你的Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) @@ -1116,6 +1117,12 @@ Python 实现的算法和设计模式。 * LiClipse:基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。[官网](http://www.liclipse.com/) * Spyder:开源 Python IDE。[官网](https://github.com/spyder-ide/spyder) +### 自动聊天工具 + +用于开发聊天机器人的库 + +*   Errbot:最简单和最流行的聊天机器人用来实现自动聊天工具。[官网](http://errbot.io/en/latest/) + ## 服务 在线工具和简化开发的 API 。 From 28a9e3e0875b3b877475aba29b036c7c085b5678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9B=A7=E5=9B=A7=E7=94=B7?= Date: Tue, 10 Jan 2017 10:47:54 +0800 Subject: [PATCH 046/143] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index bc8dc29..9f7d8a8 100644 --- a/README.md +++ b/README.md @@ -241,6 +241,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用于创建命令行程序的库。 * 命令行程序开发 + * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级API。[官网](https://github.com/peterbrittain/asciimatics) * cement:Python 的命令行程序框架。[官网](http://builtoncement.com/) * click:一个通过组合的方式来创建精美命令行界面的包。[官网](http://click.pocoo.org/dev/) * cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。[官网](http://docs.openstack.org/developer/cliff/) @@ -264,6 +265,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) +    *   try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) ### 下载器 @@ -715,6 +717,7 @@ Python实现的数据库。 * eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) * gevent:一个基于协程的 Python 网络库,使用[greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) * Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) +* uvloop:在libuv之上超快速实现asyncio事件循环。[官网](https://github.com/MagicStack/uvloop) ### 网络 @@ -933,6 +936,8 @@ Python实现的数据库。 计算机视觉库。 * OpenCV:开源计算机视觉库。[官网](http://opencv.org/) +*   pyocr:Tesseract和Cuneiform的包装库。[官网](https://github.com/jflesch/pyocr) +*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr)的另一包装库。[官网](https://github.com/madmaze/pytesseract) * [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) ### 机器学习 From 6093d7b557a7199cac7d5384bcd4f3c81676d674 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 11 Jan 2017 08:59:58 +0800 Subject: [PATCH 047/143] add contributor strongit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f7d8a8..d28c6ac 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit) 注:名单不分排名,不定期补充更新 From a91cb3b1001451fd27ba01f85ba622639af8c305 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Sat, 14 Jan 2017 09:04:56 +0800 Subject: [PATCH 048/143] add Tryton and contributor yuukilp --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d28c6ac..19bb309 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/) 注:名单不分排名,不定期补充更新 @@ -1088,7 +1088,7 @@ MapReduce 框架和库。 * itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) * pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) * Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) -* Tryton:一个通用商务框架。[官网](http://www.tryton.org/) +* [Tryton](http://hao.jobbole.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) ### 算法和设计模式 From d8b7d7eedc5aa0ba31663cdc9dc869f03155de94 Mon Sep 17 00:00:00 2001 From: Tai Lei Date: Thu, 9 Feb 2017 19:25:30 +0800 Subject: [PATCH 049/143] add keras --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 19bb309..7c1f889 100644 --- a/README.md +++ b/README.md @@ -915,6 +915,7 @@ Python实现的数据库。 * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) +* keras: 以tensorflow或者theano为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) ### 数据可视化 From 9cd7df33469b2655452955fcc0cac871b25aa402 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 22 May 2017 08:48:09 +0800 Subject: [PATCH 050/143] awesome-django url update --- README.md | 2416 ++++++++++++++++++++++++++--------------------------- 1 file changed, 1208 insertions(+), 1208 deletions(-) diff --git a/README.md b/README.md index 7c1f889..4fa965d 100644 --- a/README.md +++ b/README.md @@ -1,1208 +1,1208 @@ -# Python 资源大全中文版 - -我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。 - -Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 - -* * * - -### 我们要做什么? - -- 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 -- 整理后的内容,将收录在[伯乐在线资源频道](http://hao.jobbole.com/)。可参考已整理的内容: - - 《[Scrapy:Python的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 - - 《[Flask:一个使用Python编写的轻量级Web应用框架](http://hao.jobbole.com/flask/)》 - -* * * - -### 如何参与本项目? - -从下面的目录来看,本项目的工作量小不了,所以非常期待能有更多程序员一起来参与。 - -不过加入前,有几个小要求: - -* 英文还不错,能读懂英文并用自己的话复述; -* 在用 Python; - -如有兴趣,请加 QQ:50872495。加 Q 时请注明「Python大全」 - -* * * - -### 如何为列表贡献新资源? - -欢迎大家为列表贡献高质量的新资源,提交PR时请参照以下要求: - -* 请确保推荐的资源自己使用过 -* 提交PR时请注明推荐理由 - -资源列表管理收到PR请求后,会定期(每周)在微博转发本周提交的PR列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 - -感谢您的贡献! - -* * * - -### 本项目的参与者 - -- 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/) - -注:名单不分排名,不定期补充更新 - -* * * - -### 奖励计划 - -虽然奖励可能并不是你加入的主要原因,但还是有必要提一下: - -* 整理超过 20 个资源后,可在伯乐在线上开通打赏; -* 每整理 20 个资源,有机会获得技术书籍或各种有意思的创意、极客产品; -* [奖励详情](http://hao.jobbole.com/rewards/) - -* * * - -### 环境管理 - -管理 Python 版本和环境的工具 - -* p:非常简单的交互式 python 版本管理工具。[官网](https://github.com/qw3rtman/p) -* pyenv:简单的 Python 版本管理工具。[官网](https://github.com/yyuu/pyenv) -* Vex:可以在虚拟环境中执行命令。[官网](https://github.com/sashahart/vex) -* virtualenv:创建独立 Python 环境的工具。[官网](https://pypi.python.org/pypi/virtualenv) -* virtualenvwrapper:virtualenv 的一组扩展。[官网](https://pypi.python.org/pypi/virtualenvwrapper) - -### 包管理 - -管理包和依赖的工具。 - -* pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) -* pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) -* conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) -* Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) -* wheel:Python 分发的新标准,意在取代 eggs。[官网](http://pythonwheels.com/) - -### 包仓库 - -本地 PyPI 仓库服务和代理。 - -* warehouse:下一代 PyPI。[官网](https://github.com/pypa/warehouse) - * Warehouse:PyPA 提供的 PyPI 镜像工具。[官网](https://warehouse.python.org/) [bandersnatch](https://bitbucket.org/pypa/bandersnatch) -* devpi:PyPI 服务和打包/测试/分发工具。[官网](http://doc.devpi.net/) -* localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。[官网](https://github.com/mvantellingen/localshop) - -### 分发 - -打包为可执行文件以便分发。 - -* PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。[官网](https://github.com/pyinstaller/pyinstaller) -* dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。[官网](http://dh-virtualenv.readthedocs.org/) -* Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。[官网](http://nuitka.net/) -* py2app:将 Python 脚本变为独立软件包(Mac OS X)。[官网](http://pythonhosted.org/py2app/) -* py2exe:将 Python 脚本变为独立软件包(Windows)。[官网](http://www.py2exe.org/) -* pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。[官网](http://pynsist.readthedocs.org/) - -### 构建工具 - -将源码编译成软件。 - -* buildout:一个构建系统,从多个组件来创建,组装和部署应用。[官网](http://www.buildout.org/) -* BitBake:针对嵌入式 Linux 的类似 make 的构建工具。[官网](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html) -* fabricate:对任何语言自动找到依赖关系的构建工具。[官网](https://code.google.com/archive/p/fabricate) -* PlatformIO:多平台命令行构建工具。[官网](https://github.com/platformio/platformio) -* PyBuilder:纯 Python 实现的持续化构建工具。[官网](https://github.com/pybuilder/pybuilder) -* SCons:软件构建工具。[官网](http://www.scons.org/) - -### 交互式解析器 - -交互式 Python 解析器。 - -* IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) -* [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) -* ptpython:高级交互式Python解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) - -### 文件 - -文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 - -* imghdr:(Python 标准库)检测图片类型。[官网](https://docs.python.org/2/library/imghdr.html) -* mimetypes:(Python 标准库)将文件名映射为 MIME 类型。[官网](https://docs.python.org/2/library/mimetypes.html) -* path.py:对 os.path 进行封装的模块。[官网](https://github.com/jaraco/path.py) -* pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。[官网](https://pathlib.readthedocs.org/en/pep428/) -* python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。[官网](https://github.com/ahupp/python-magic) -* Unipath:用面向对象的方式操作文件和目录。[官网](https://github.com/mikeorr/Unipath) -* watchdog:管理文件系统事件的 API 和 shell 工具[官网](https://github.com/gorakhargosh/watchdog) - -### 日期和时间 - -操作日期和时间的类库。 - -* arrow:更好的 Python 日期时间操作类库。[官网](https://github.com/crsmithdev/arrow) -* Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) -* dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) -* delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) -* moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。[官网](https://github.com/zachwill/moment) -* PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) -* pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。[官网](https://launchpad.net/pytz) -* when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) - -### 文本处理 - -用于解析和操作文本的库。 - -* 通用 - * [chardet](http://hao.jobbole.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) - * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) - * ftfy:让Unicode文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) - * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) - * Levenshtein:快速计算编辑距离以及字符串的相似度。[官网](https://github.com/ztane/python-Levenshtein/) - * pangu.py:在中日韩语字符和数字字母之间添加空格。[官网](https://github.com/vinta/pangu.py) - * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python实现。 - * shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。[官网](https://github.com/stochastic-technologies/shortuuid) - * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) - * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) - * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) -* Slug化 - * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) - * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) - * unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。[官网](https://github.com/mozilla/unicode-slugify) -* 解析器 - * phonenumbers:解析,格式化,储存,验证电话号码。[官网](https://github.com/daviddrysdale/python-phonenumbers) - * PLY:lex 和 yacc 解析工具的 Python 实现。[官网](http://www.dabeaz.com/ply/) - * Pygments:通用语法高亮工具。[官网](http://pygments.org/) - * pyparsing:生成通用解析器的框架。[官网](http://pyparsing.wikispaces.com/) - * python-nameparser:把一个人名分解为几个独立的部分。[官网](https://github.com/derek73/python-nameparser) - * python-user-agents:浏览器 user agent 解析器。[官网](https://github.com/selwin/python-user-agents) - * sqlparse:一个无验证的 SQL 解析器。[官网](https://sqlparse.readthedocs.org/en/latest/) - -### 特殊文本格式处理 - -一些用来解析和操作特殊文本格式的库。 - -* 通用 - * tablib:一个用来处理中表格数据的模块。[官网](https://github.com/kennethreitz/tablib) -* Office - * Marmir:把输入的Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) - * openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。[官网](https://openpyxl.readthedocs.org/en/latest/) - * python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。[官网](https://github.com/python-openxml/python-docx) - * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) - * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) - * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) - * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) - * relatorio:模板化OpenDocument 文件。[官网](http://relatorio.tryton.org/) -* PDF - * PDFMiner:一个用于从PDF文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) - * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) - * ReportLab:快速创建富文本 PDF 文档。[官网](http://www.reportlab.com/opensource/) -* Markdown - * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) - * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) - * Python-Markdiwn2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) -* YAML - * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) -* CSV - * csvkit:用于转换和操作 CSV 的工具。[官网](https://github.com/wireservice/csvkit) -* Archive - * unp:一个用来方便解包归档文件的命令行工具。[官网](https://github.com/mitsuhiko/unp) - -### 自然语言处理 - -用来处理人类语言的库。 - -* [NLTK](http://hao.jobbole.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) -* jieba:中文分词工具。[官网](https://github.com/fxsjy/jieba) -* langid.py:独立的语言识别系统。[官网](https://github.com/saffsd/langid.py) -* Pattern:Python 网络信息挖掘模块。[官网](http://www.clips.ua.ac.be/pattern) -* SnowNLP:一个用来处理中文文本的库。[官网](https://github.com/isnowfy/snownlp) -* TextBlob:为进行普通自然语言处理任务提供一致的 API。[官网](http://textblob.readthedocs.org/en/latest/) -* TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。[官网](https://github.com/2shou/TextGrocery) - -### 文档 - -用以生成项目文档的库。 - -* [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) - * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) -* MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) -* pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) -* Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) - -### 配置 - -用来保存和解析配置的库。 - -* config:[logging](https://docs.python.org/2/library/logging.html) 模块作者写的分级配置模块。[官网](https://www.red-dove.com/config-doc/) -* ConfigObj:INI 文件解析器,带验证功能。[官网](http://www.voidspace.org.uk/python/configobj.html) -* ConfigParser:(Python 标准库) INI 文件解析器。[官网](https://docs.python.org/2/library/configparser.html) -* profig:通过多种格式进行配置,具有数值转换功能。[官网](http://profig.readthedocs.org/en/default/) -* python-decouple:将设置和代码完全隔离。[官网](https://github.com/henriquebastos/python-decouple) - -### 命令行工具 - -用于创建命令行程序的库。 - -* 命令行程序开发 - * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级API。[官网](https://github.com/peterbrittain/asciimatics) - * cement:Python 的命令行程序框架。[官网](http://builtoncement.com/) - * click:一个通过组合的方式来创建精美命令行界面的包。[官网](http://click.pocoo.org/dev/) - * cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。[官网](http://docs.openstack.org/developer/cliff/) - * clint:Python 命令行程序工具。[官网](https://github.com/kennethreitz/clint) - * colorama:跨平台彩色终端文本。[官网](https://pypi.python.org/pypi/colorama) - * docopt:Python 风格的命令行参数解析器。[官网](http://docopt.org/) - * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) - * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) - * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](https://github.com/Russell91/pythonpy/wiki) -* 生产力工具 - * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) - * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) - * caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。[官网](https://github.com/brettcannon/caniusepython3) - * cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。[官网](https://github.com/audreyr/cookiecutter) - * doitlive:一个用来在终端中进行现场演示的工具。[官网](https://github.com/sloria/doitlive) - * howdoi:通过命令行获取即时的编程问题解答。[官网](https://github.com/gleitz/howdoi) - * httpie:一个命令行HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) - * PathPicker:从bash输出中选出文件。[官网](https://github.com/facebook/PathPicker) - * percol:向UNIX shell 传统管道概念中加入交互式选择功能。[官网](https://github.com/mooz/percol) - * SAWS:一个加强版的 AWS 命令行。[官网](https://github.com/donnemartin/saws) - * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) - * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) - * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) -    *   try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) - -### 下载器 - -用来进行下载的库. - -* s3cmd:一个用来管理Amazon S3 和 CloudFront 的命令行工具。[官网](https://github.com/s3tools/s3cmd) -* s4cmd:超级 S3 命令行工具,性能更加强劲。[官网](https://github.com/bloomreach/s4cmd) -* you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。[官网](https://www.soimort.org/you-get/) -* youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。[官网](http://rg3.github.io/youtube-dl/) - -### 图像处理 - -用来操作图像的库. - -* [pillow](http://hao.jobbole.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) -* hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) -* imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) -* nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) -* pyBarcode:不借助 PIL 库在 Python 程序中生成条形码。[官网](https://pythonhosted.org/pyBarcode/) -* pygram:类似 Instagram 的图像滤镜。[官网](https://github.com/ajkumar25/pygram) -* python-qrcode:一个纯 Python 实现的二维码生成器。[官网](https://github.com/lincolnloop/python-qrcode) -* Quads:基于四叉树的计算机艺术。[官网](https://github.com/fogleman/Quads) -* scikit-image:一个用于(科学)图像处理的 Python 库。[官网](http://scikit-image.org/) -* thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。[官网](https://github.com/thumbor/thumbor) -* wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的Python 绑定。MagickWand 是 ImageMagick的 C API 。[官网](https://github.com/dahlia/wand) - -### OCR - -光学字符识别库。 - -* pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) -* [pytesseract](http://hao.jobbole.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) -* python-tesseract - [Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 - -### 音频 - -用来操作音频的库 - -* audiolazy:Python 的数字信号处理包。[官网](https://github.com/danilobellini/audiolazy) -* audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) -* beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具[官网](http://beets.io/) -* dejavu:音频指纹提取和识别[官网](https://github.com/worldveil/dejavu) -* [django-elastic-transcoder](http://hao.jobbole.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) -* eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) -* id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) -* m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) -* mutagen:一个用来处理音频元数据的 Python 模块。[官网](https://bitbucket.org/lazka/mutagen) -* pydub:通过简单、简洁的高层接口来操作音频文件。[官网](https://github.com/jiaaro/pydub) -* pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端[官网](https://github.com/echonest/pyechonest) -* talkbox:一个用来处理演讲/信号的 Python 库[官网](http://scikits.appspot.com/talkbox) -* TimeSide:开源 web 音频处理框架。[官网](https://github.com/Parisson/TimeSide) -* tinytag:一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) -* mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。[官网](http://bspaans.github.io/python-mingus/) - -### Video - -用来操作视频和GIF的库。 - -* moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。[官网](http://zulko.github.io/moviepy/) -* scikit-video:SciPy 视频处理常用程序。[官网](https://github.com/aizvorski/scikit-video) - -### 地理位置 - -地理编码地址以及用来处理经纬度的库。 - -* GeoDjango:世界级地理图形 web 框架。[官网](https://docs.djangoproject.com/en/dev/ref/contrib/gis/) -* GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。[官网](https://github.com/maxmind/geoip-api-python) -* geojson:GeoJSON 的 Python 绑定及工具。[官网](https://github.com/frewsxcv/python-geojson) -* geopy:Python 地址编码工具箱。[官网](https://github.com/geopy/geopy) -* pygeoip:纯 Python GeoIP API。[官网](https://github.com/appliedsec/pygeoip) -* django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。[官网](https://github.com/SmileyChris/django-countries) - -### HTTP - -使用HTTP的库。 - -* requests:人性化的HTTP请求库。[官网](http://docs.python-requests.org/en/latest/) -* grequests:requests 库 + gevent ,用于异步 HTTP 请求.[官网](https://github.com/kennethreitz/grequests) -* httplib2:全面的 HTTP 客户端库。[官网](https://github.com/jcgregorio/httplib2) -* treq:类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。[官网](https://github.com/twisted/treq) -* urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。[官网](https://github.com/shazow/urllib3) - -### 数据库 - -Python实现的数据库。 - -* pickleDB:一个简单,轻量级键值储存数据库。[官网](https://pythonhosted.org/pickleDB/) -* PipelineDB:流式 SQL 数据库。[官网](https://www.pipelinedb.com/) -* TinyDB:一个微型的,面向文档型数据库。[官网](https://github.com/msiemens/tinydb) -* ZODB:一个 Python 原生对象数据库。一个键值和对象图数据库。[官网](http://www.zodb.org/en/latest/) - -### 数据库驱动 - -用来连接和操作数据库的库。 - -* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 - * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) - * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 - * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) - * PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。[官网](https://github.com/PyMySQL/PyMySQL) -* PostgreSQL - * psycopg2:Python 中最流行的 PostgreSQL 适配器。[官网](http://initd.org/psycopg/) - * queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。[官网](https://github.com/gmr/queries) - * txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。[官网](http://txpostgres.readthedocs.org/en/latest/) -* 其他关系型数据库 - * apsw:另一个 Python SQLite封装。[官网](http://rogerbinns.github.io/apsw/) - * dataset:在数据库中存储Python字典 - * pymssql:一个简单的Microsoft SQL Server数据库接口。[官网](http://www.pymssql.org/en/latest/) -* NoSQL 数据库 - * cassandra-python-driver:Cassandra 的 Python 驱动。[官网](https://github.com/datastax/python-driver) - * HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。[官网](http://happybase.readthedocs.org/en/latest/) - * Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。[官网](https://plyvel.readthedocs.org/en/latest/) - * py2neo:Neo4j restful 接口的Python 封装客户端。[官网](http://py2neo.org/2.0/) - * pycassa:Cassandra 的 Python Thrift 驱动。[官网](https://github.com/pycassa/pycassa) - * PyMongo:MongoDB 的官方 Python 客户端。[官网](https://docs.mongodb.org/ecosystem/drivers/python/) - * redis-py:Redis 的 Python 客户端。[官网](https://github.com/andymccurdy/redis-py) - * telephus:基于 Twisted 的 Cassandra 客户端。[官网](https://github.com/driftx/Telephus) - * txRedis:基于 Twisted 的 Redis 客户端。[官网](https://github.com/deldotdr/txRedis) - -### ORM - -实现对象关系映射或数据映射技术的库。 - -* 关系型数据库 - * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) - * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) - * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy)系列 - * [Peewee](http://hao.jobbole.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) - * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) - * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) -* NoSQL 数据库 - * django-mongodb-engine:Django MongoDB 后端。[官网](https://github.com/django-nonrel/mongodb-engine) - * PynamoDB:[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。[官网](https://github.com/jlafon/PynamoDB) - * flywheel:Amazon DynamoDB 的对象映射工具。[官网](https://github.com/mathcamp/flywheel) - * MongoEngine:一个Python 对象文档映射工具,用于 MongoDB。[官网](http://mongoengine.org/) - * hot-redis:为 Redis 提供 Python 丰富的数据类型。[官网](https://github.com/stephenmcd/hot-redis) - * redisco:一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。[官网](https://github.com/kiddouk/redisco) -* 其他 - * butterdb:Google Drive 电子表格的 Python ORM。[官网](https://github.com/Widdershin/butterdb) - -### Web 框架 - -全栈 Web 框架。 - -* [Django](http://hao.jobbole.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) - * [awesome-django](https://github.com/rosarior/awesome-django)系列 -* [Flask](http://hao.jobbole.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) - * [awesome-flask](https://github.com/humiaozuzu/awesome-flask)系列 -* pyramid:一个小巧,快速,接地气的开源Python web 框架。 - * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid)系列 -* [Bottle](http://hao.jobbole.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) -* CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。[官网](http://www.cherrypy.org/) -* TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) -* [web.py](http://hao.jobbole.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) -* web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) -* [Tornado](http://hao.jobbole.com/tornado/):一个web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) - -### 权限 - -允许或拒绝用户访问数据或功能的库。 - -* Carteblanche:Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.[官网](https://github.com/neuman/python-carteblanche/) -* django-guardian:Django 1.2+ 实现了单个对象权限。[官网](https://github.com/django-guardian/django-guardian) -* django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。[官网](https://github.com/dfunckt/django-rules) - -### CMS - -内容管理系统 - -* odoo-cms: 一个开源的,企业级 CMS,基于odoo。[官网](http://www.odoo.com) -* django-cms:一个开源的,企业级 CMS,基于 Django。[官网](http://www.django-cms.org/en/) -* djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。[官网](http://djedi-cms.org/) -* FeinCMS:基于 Django 构建的最先进的内容管理系统之一。[官网](http://www.feincms.org/) -* Kotti:一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。[官网](http://kotti.pylonsproject.org/) -* Mezzanine:一个强大的,持续的,灵活的内容管理平台。[官网](http://mezzanine.jupo.org/) -* Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。[官网](http://opps.github.io/opps/) -* Plone:一个构建于开源应用服务器 Zope 之上的 CMS。[官网](https://plone.org/) -* Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。[官网](http://quokkaproject.org/) -* [Wagtail](http://hao.jobbole.com/wagtail/):一个 Django 内容管理系统。[官网](https://wagtail.io/) -* Widgy:最新的 CMS 框架,基于 Django。[官网](https://wid.gy/) - -### 电子商务 - -用于电子商务以及支付的框架和库。 - -* django-oscar:一个用于 Django 的开源的电子商务框架。[官网](http://oscarcommerce.com/) -* django-shop:一个基于 Django 的店铺系统。[官网](https://github.com/awesto/django-shop) -* Cartridge:一个基于 Mezzanine 构建的购物车应用。[官网](https://github.com/stephenmcd/cartridge) -* shoop:一个基于 Django 的开源电子商务平台。[官网](https://www.shoop.io/en/) -* alipay:非官方的 Python 支付宝 API。[官网](https://github.com/lxneng/alipay) -* merchant:一个可以接收来自多种支付平台支付的 Django 应用。[官网](https://github.com/agiliq/merchant) -* money:货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.[官网](https://github.com/carlospalol/money) -* python-currencies:显示货币格式以及它的数值。[官网](https://github.com/Alir3z4/python-currencies) - -### RESTful API - -用来开发RESTful APIs的库 - -* Django - * [django-rest-framework](http://hao.jobbole.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) - * django-tastypie:为Django 应用开发API。[官网](http://tastypieapi.org/) - * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) -* Flask - * flask-api:为 flask 开发的,可浏览 Web APIs 。[官网](http://www.flaskapi.org/) - * flask-restful:为 flask 快速创建REST APIs 。[官网](http://flask-restful.readthedocs.org/en/latest/) - * flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。[官网](https://flask-restless.readthedocs.org/en/latest/) - * flask-api-utils:为 Flask 处理 API 表示和验证。[官网](https://github.com/marselester/flask-api-utils) - * eve:REST API 框架,由 Flask, MongoDB 等驱动。[官网](https://github.com/nicolaiarocci/eve) -* Pyramid - * cornice:一个Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) -* 与框架无关的 - * falcon:一个用来建立云 API 和 web app 后端的高性能框架。[官网](http://falconframework.org/) - * sandman:为现存的数据库驱动系统自动创建 REST APIs 。[官网](https://github.com/jeffknupp/sandman) - * restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。[官网](http://restless.readthedocs.org/en/latest/) - * ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。[官网](https://github.com/vertical-knowledge/ripozo) - -### 验证 - -实现验证方案的库。 - -* OAuth - * Authomatic:简单但是强大的框架,身份验证/授权客户端。[官网](http://peterhudec.github.io/authomatic/) - * django-allauth:Django 的验证应用。[官网](https://github.com/pennersr/django-allauth) - * django-oauth-toolkit:为 Django 用户准备的 OAuth2。[官网](https://github.com/evonove/django-oauth-toolkit) - * django-oauth2-provider:为 Django 应用提供 OAuth2 接入。[官网](https://github.com/caffeinehit/django-oauth2-provider) - * Flask-OAuthlib:OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。[官网](https://github.com/lepture/flask-oauthlib) - * OAuthLib:一个 OAuth 请求-签名逻辑通用、 完整的实现。[官网](https://github.com/idan/oauthlib) - * python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。[官网](https://github.com/joestump/python-oauth2) - * python-social-auth:一个设置简单的社会化验证方式。[官网](https://github.com/omab/python-social-auth) - * rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。[官网](https://github.com/litl/rauth) - * sanction:一个超级简单的OAuth2 客户端实现。[官网](https://github.com/demianbrecht/sanction) -* 其他 - * jose:JavaScript 对象签名和加密草案的实现。[官网](https://github.com/demonware/jose) - * PyJWT:JSON Web 令牌草案 01。[官网](https://github.com/jpadilla/pyjwt) - * python-jws:JSON Web 签名草案 02 的实现。[官网](https://github.com/brianloveswords/python-jws) - * python-jwt:一个用来生成和验证 JSON Web 令牌的模块。[官网](https://github.com/davedoesdev/python-jwt) - -### 模板引擎 - -模板生成和词法解析的库和工具。 - -* [Jinja2](http://hao.jobbole.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) -* Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) -* Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) -* Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) - -### Queue - -处理事件以及任务队列的库。 - -* celery:一个异步任务队列/作业队列,基于分布式消息传递。[官网](http://www.celeryproject.org/) -* huey:小型多线程任务队列。[官网](https://github.com/coleifer/huey) -* [mrq](http://hao.jobbole.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) -* rq:简单的 Python 作业队列。[官网](http://python-rq.org/) -* simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。[官网](https://github.com/rdegges/simpleq) - -### 搜索 - -对数据进行索引和执行搜索查询的库和软件。 - -* django-haystack:Django 模块化搜索。[官网](https://github.com/django-haystack/django-haystack) -* elasticsearch-py:Elasticsearch 的官方底层 Python 客户端。[官网](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html) -* elasticsearch-dsl-py:Elasticsearch 的官方高级 Python 客户端。[官网](https://github.com/elastic/elasticsearch-dsl-py) -* solrpy:[solr](http://lucene.apache.org/solr/)的 Python 客户端。[官网](https://github.com/edsu/solrpy) -* Whoosh:一个快速的纯 Python 搜索引擎库。[官网](http://whoosh.readthedocs.org/en/latest/) - -### 动态消息 - -用来创建用户活动的库。 - -* django-activity-stream:从你的站点行为中生成通用活动信息流。[官网](https://github.com/justquick/django-activity-stream) -* Stream-Framework:使用 Cassandra 和 Redis 创建动态消息和通知系统。[官网](https://github.com/tschellenbach/Stream-Framework) - -### 资源管理 - -管理、压缩、缩小网站资源的工具。 - -* django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。[官网](https://github.com/django-compressor/django-compressor) -* django-storages:一个针对 Django 的自定义存储后端的工具集合。[官网](http://django-storages.readthedocs.org/en/latest/) -* fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。[官网](http://www.fanstatic.org/en/latest/) -* File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。[官网](http://fileconveyor.org/) -* Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。[官网](http://flask-assets.readthedocs.org/en/latest/) -* jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。[官网](https://github.com/jaysonsantos/jinja-assets-compressor) -* webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。[官网](http://webassets.readthedocs.org/en/latest/) - -### 缓存 - -缓存数据的库。 - -* Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。[官网](http://beaker.readthedocs.org/en/latest/) -* django-cache-machine:Django 模型的自动缓存和失效。[官网](https://github.com/django-cache-machine/django-cache-machine) -* django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。[官网](https://github.com/Suor/django-cacheops) -* django-viewlet:渲染模板,同时具有额外的缓存控制功能。[官网](https://github.com/5monkeys/django-viewlet) -* dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。[官网](http://dogpilecache.readthedocs.org/en/latest/) -* HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。[官网](https://pypi.python.org/pypi/HermesCache) -* johnny-cache:django应用缓存框架。[官网](https://github.com/jmoiron/johnny-cache) -* pylibmc:[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。[官网](https://github.com/lericson/pylibmc) - -### 电子邮件 - -用来发送和解析电子邮件的库。 - -* django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。[官网](https://github.com/StreetVoice/django-celery-ses) -* envelopes:供人类使用的电子邮件库。[官网](http://tomekwojcik.github.io/envelopes/) -* flanker:一个 email 地址和 Mime 解析库。[官网](https://github.com/mailgun/flanker) -* imbox:Python IMAP 库[官网](https://github.com/martinrusev/imbox) -* inbox.py:Python SMTP 服务器。[官网](https://github.com/kennethreitz/inbox.py) -* inbox:一个开源电子邮件工具箱。[官网](https://github.com/nylas/sync-engine) -* lamson:Python 风格的 SMTP 应用服务器。[官网](https://github.com/zedshaw/lamson) -* mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。[官网](https://github.com/WoLpH/mailjet) -* marrow.mailer:高性能可扩展邮件分发框架。[官网](https://github.com/marrow/mailer) -* modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。[官网](https://github.com/tonioo/modoboa) -* pyzmail:创建,发送和解析电子邮件。[官网](http://www.magiksys.net/pyzmail/) -* Talon:Mailgun 库,用来抽取信息和签名。[官网](https://github.com/mailgun/talon) - -### 国际化 - -用来进行国际化的库。 - -* Babel:一个Python 的国际化库。[官网](http://babel.pocoo.org/en/latest/) -* Korean:一个韩语词态库。[官网](https://korean.readthedocs.org/en/latest/) - -### URL处理 - -解析URLs的库 - -* furl:一个让处理 URL 更简单小型 Python 库。[官网](https://github.com/gruns/furl) -* purl:一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。[官网](https://github.com/codeinthehole/purl) -* pyshorteners:一个纯 Python URL 缩短库。[官网](https://github.com/ellisonleao/pyshorteners) -* shorturl:生成短小 URL 和类似 bit.ly 短链的Python 实现。[官网](https://github.com/Alir3z4/python-shorturl) -* webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。[官网](https://github.com/sloria/webargs) - -### HTML处理 - -处理 HTML和XML的库。 - -* BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。[官网](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) -* bleach:一个基于白名单的 HTML 清理和文本链接库。[官网](http://bleach.readthedocs.org/en/latest/) -* cssutils:一个 Python 的 CSS 库。[官网](https://pypi.python.org/pypi/cssutils/) -* html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。[官网](https://github.com/html5lib/html5lib-python) -* lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) -* MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) -* pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) -* untangle:将XML文档转换为Python对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) -* xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) -* xmltodict:像处理 JSON 一样处理 XML。[官网](https://github.com/martinblech/xmltodict) - -爬取网络站点的库 - -* Scrapy:一个快速高级的屏幕爬取及网页采集框架。[官网](http://scrapy.org/) -* cola:一个分布式爬虫框架。[官网](https://github.com/chineking/cola) -* Demiurge:基于PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) -* feedparser:通用 feed 解析器。[官网](http://pythonhosted.org/feedparser/) -* Grab:站点爬取框架。[官网](http://grablib.org/) -* MechanicalSoup:用于自动和网络站点交互的 Python 库。[官网](https://github.com/hickford/MechanicalSoup) -* portia:Scrapy 可视化爬取。[官网](https://github.com/scrapinghub/portia) -* pyspider:一个强大的爬虫系统。[官网](https://github.com/binux/pyspider) -* RoboBrowser:一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。[官网](https://github.com/jmcarp/robobrowser) - -### 网页内容提取 - -用于进行网页内容提取的库。 - -* Haul:一个可以扩展的图像爬取工具。[官网](https://github.com/vinta/Haul) -* html2text:将 HTML 转换为 Markdown 格式文本[官网](https://github.com/Alir3z4/html2text) -* lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) -* micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) -* [newspaper](http://hao.jobbole.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) -* opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。[官网](https://github.com/erikriver/opengraph) -* [python-goose](http://hao.jobbole.com/python-goose/):HTML内容/文章提取器。[官网](https://github.com/grangier/python-goose) -* python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) -* sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) -* sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) -* textract:从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。[官网](https://github.com/deanmalmgren/textract) - -### 表单 - -进行表单操作的库。 - -* Deform:Python HTML 表单生成库,受到了 formish 表单生成库的启发。[官网](http://deform.readthedocs.org/en/latest/) -* django-bootstrap3:集成了 Bootstrap 3 的 Django。[官网](https://github.com/dyve/django-bootstrap3) -* django-crispy-forms:一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。[官网](http://django-crispy-forms.readthedocs.org/en/latest/) -* django-remote-forms:一个平台独立的 Django 表单序列化工具。[官网](https://github.com/WiserTogether/django-remote-forms) -* WTForms:一个灵活的表单验证和呈现库。[官网](http://wtforms.readthedocs.org/en/latest/) -* WTForms-JSON:一个 WTForms 扩展,用来处理 JSON 数据。[官网](http://wtforms-json.readthedocs.org/en/latest/) - -### 数据验证 - -数据验证库。多用于表单验证。 - -* Cerberus:A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition.[官网](http://docs.python-cerberus.org/en/stable/) -* colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。[官网](http://docs.pylonsproject.org/projects/colander/en/latest/) -* kmatch:一种用于匹配/验证/筛选 Python 字典的语言。[官网](https://github.com/ambitioninc/kmatch) -* schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) -* Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) -* valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) -* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) - -### 反垃圾技术 - -帮助你和电子垃圾进行战斗的库。 - -* django-simple-captcha:一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。[官网](https://github.com/mbi/django-simple-captcha) -* django-simple-spam-blocker:一个用于Django的简单的电子垃圾屏蔽工具。[官网](https://github.com/moqada/django-simple-spam-blocker) - -### 标记 - -用来进行标记的库。 - -* django-taggit:简单的 Django 标记工具。[官网](https://github.com/alex/django-taggit) - -### 管理面板 - -管理界面库。 - -* Ajenti:一个你的服务器值得拥有的管理面板。[官网](https://github.com/Eugeny/ajenti) -* django-suit:Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。[官网](http://djangosuit.com/) -* django-xadmin:Django admin 的一个替代品,具有很多不错的功能。[官网](https://github.com/sshwsfc/django-xadmin) -* flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。[官网](https://github.com/flask-admin/flask-admin) -* flower:一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。[官网](https://github.com/mher/flower) -* Grappelli:Django 管理界面的一个漂亮的皮肤。[官网](http://grappelliproject.com/) -* Wooey:一个 Django 应用,可以为 Python 脚本创建 web 用户界面。[官网](https://github.com/wooey/wooey) - -### 静态站点生成器 - -静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。 - -* Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。[官网](http://blog.getpelican.com/) -* Cactus:为设计师设计的静态站点生成器。[官网](https://github.com/koenbok/Cactus/) -* Hyde:基于 Jinja2 的静态站点生成器。[官网](http://hyde.github.io/) -* Nikola:一个静态网站和博客生成器。[官网](https://www.getnikola.com/) -* Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。[官网](http://tinkerer.me/) -* Lektor:一个简单易用的静态 CMS 和博客引擎。[官网](https://www.getlektor.com/) - -### 进程 - -操作系统进程启动及通信库。 - -* envoy:比 Python [subprocess](https://docs.python.org/2/library/subprocess.html) 模块更人性化。[官网](https://github.com/kennethreitz/envoy) -* sarge:另一 种 subprocess 模块的封装。[官网](http://sarge.readthedocs.org/en/latest/) -* sh:一个完备的 subprocess 替代库。[官网](https://github.com/amoffat/sh) - -### 并发和并行 - -用以进行并发和并行操作的库。 - -* multiprocessing:(Python 标准库) 基于进程的“线程”接口。[官网](https://docs.python.org/2/library/multiprocessing.html) -* threading:(Python 标准库)更高层的线程接口。[官网](https://docs.python.org/2/library/threading.html) -* eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) -* gevent:一个基于协程的 Python 网络库,使用[greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) -* Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) -* uvloop:在libuv之上超快速实现asyncio事件循环。[官网](https://github.com/MagicStack/uvloop) - -### 网络 - -用于网络编程的库。 - -* asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) -* [Twisted](http://hao.jobbole.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) -* pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) -* diesel:基于Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) -* pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) -* txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。[官网](https://github.com/smira/txZMQ) - -### WebSocket - -帮助使用WebSocket的库。 - -* AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。[官网](https://github.com/crossbario/autobahn-python) -* Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn).[官网](https://github.com/crossbario/crossbar/) -* django-socketio:给 Django 用的 WebSockets。[官网](https://github.com/stephenmcd/django-socketio) -* WebSocket-for-Python:为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) - -### WSGI 服务器 - -兼容 WSGI 的 web 服务器 - -* gunicorn:Pre-forked, 部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/gunicorn) -* uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。[官网](https://uwsgi-docs.readthedocs.org/en/latest/) -* [bjoern](http://hao.jobbole.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) -* fapws3:异步 (仅对于网络端),由 C 语言编写。[官网](http://www.fapws.org/) -* meinheld:异步,部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/meinheld) -* netius:异步,非常快速。[官网](https://github.com/hivesolutions/netius) -* paste:多线程,稳定,久经考验。[官网](http://pythonpaste.org/) -* rocket:多线程。[官网](https://pypi.python.org/pypi/rocket) -* waitress:多线程, 是它驱动着 Pyramid 框架。[官网](https://waitress.readthedocs.org/en/latest/) -* Werkzeug:一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。[官网](http://werkzeug.pocoo.org/) - -### RPC 服务器 - -兼容 RPC 的服务器。 - -* SimpleJSONRPCServer:这个库是 JSON-RPC 规范的一个实现。[官网](https://github.com/joshmarshall/jsonrpclib/) -* SimpleXMLRPCServer:(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。[官网](https://docs.python.org/2/library/simplexmlrpcserver.html) -* zeroRPC:zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。[官网](https://github.com/0rpc/zerorpc-python) - -### 密码学 - -* cryptography:这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。[官网](https://cryptography.io/en/latest/) -* hashids:在 Python 中实现 [hashids](http://hashids.org/) 。[官网](https://github.com/davidaurelio/hashids-python) -* Paramiko:SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。[官网](http://www.paramiko.org/) -* Passlib:安全密码存储/哈希库,[官网](https://pythonhosted.org/passlib/) -* PyCrypto:Python 密码学工具箱。[官网](https://www.dlitz.net/software/pycrypto/) -* PyNacl:网络和密码学(NaCl) 库的 Python 绑定。[官网](https://github.com/pyca/pynacl) - -### 图形用户界面 - -用来创建图形用户界面程序的库。 - -* curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) -* enaml:使用类似 QML 的Declaratic语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) -* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。[官网](https://kivy.org/) -* pyglet:一个Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) -* PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) -* PySide:P跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4。[官网](https://wiki.qt.io/PySide) -* Tkinter:Tkinter 是 Python GUI 的一个事实标准库。[官网](https://wiki.python.org/moin/TkInter) -* Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。[官网](https://github.com/pybee/toga) -* urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。[官网](http://urwid.org/) -* wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。[官网](http://wxpython.org/) -* PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定[官网](https://wiki.gnome.org/Projects/PyGObject) -* Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。[官网](https://github.com/zoofIO/flexx) - -### 游戏开发 - -超赞的游戏开发库。 - -* Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。[官网](http://cocos2d.org/) -* Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。[官网](https://www.panda3d.org/) -* Pygame:Pygame 是一组 Python 模块,用来编写游戏。[官网](http://www.pygame.org/news.html) -* PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。[官网](http://www.ogre3d.org/tikiwiki/PyOgre) -* PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。[官网](http://pyopengl.sourceforge.net/) -* PySDL2:SDL2 库的封装,基于 ctypes。[官网](http://pysdl2.readthedocs.org/en/latest/) -* RenPy:一个视觉小说(visual novel)引擎。[官网](https://www.renpy.org/) - -### 日志 - -用来生成和操作日志的库。 - -* logging:(Python 标准库) 为 Python 提供日志功能。[官网](https://docs.python.org/2/library/logging.html) -* logbook:Logging 库的替代品。[官网](http://pythonhosted.org/Logbook/) -* Eliot:为复杂的和分布式系统创建日志。[官网](https://eliot.readthedocs.org/en/latest/) -* Raven:Sentry的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) -* Sentry:实时记录和收集日志的服务器。[官网](https://pypi.python.org/pypi/sentry) - -### Testing - -进行代码库测试和生成测试数据的库。 - -* 测试框架 - * unittest:(Python 标准库) 单元测试框架。[官网](https://docs.python.org/2/library/unittest.html) - * nose:nose 扩展了 unittest 的功能。[官网](https://nose.readthedocs.org/en/latest/) - * contexts:一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。[官网](https://github.com/benjamin-hodgson/Contexts) - * hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。[官网](https://github.com/DRMacIver/hypothesis) - * mamba:Python 的终极测试工具, 拥护BDD。[官网](http://nestorsalceda.github.io/mamba/) - * PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。[官网](https://github.com/asweigart/pyautogui) - * pyshould:Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。[官网](https://github.com/drslump/pyshould) - * pytest:一个成熟的全功能 Python 测试工具。[官网](http://pytest.org/latest/) - * green:干净,多彩的测试工具。[官网](https://github.com/CleanCut/green) - * pyvows:BDD 风格的测试工具,受Vows.js的启发。[官网](http://heynemann.github.io/pyvows/)- - * Robot Framework:一个通用的自动化测试框架。[官网](https://github.com/robotframework/robotframework) -* Web 测试 - * Selenium:[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。[官网](https://pypi.python.org/pypi/selenium) - * locust:使用 Python 编写的,可扩展的用户加载测试工具。[官网](https://github.com/locustio/locust) - * sixpack:一个和语言无关的 A/B 测试框架。[官网](https://github.com/seatgeek/sixpack) - * splinter:开源的 web 应用测试工具。[官网](https://splinter.readthedocs.org/en/latest/) -* Mock测试 - * mock:(Python 标准库) 一个用于伪造测试的库。[官网](https://docs.python.org/3/library/unittest.mock.html) - * doublex:Python 的一个功能强大的 doubles  测试框架。[官网](https://pypi.python.org/pypi/doublex) - * freezegun:通过伪造日期模块来生成不同的时间。[官网](https://github.com/spulec/freezegun) - * httmock:针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。[官网](https://github.com/patrys/httmock) - * httpretty:Python 的 HTTP 请求 mock 工具。[官网](http://falcao.it/HTTPretty/) - * responses:伪造 Python 中的 requests 库的一个通用库。[官网](https://github.com/getsentry/responses) - * VCR.py:在你的测试中记录和重放 HTTP 交互。[官网](https://github.com/kevin1024/vcrpy) -* 对象工厂 - * factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。[官网](https://github.com/rbarrois/factoryboy) - * mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。[官网](https://github.com/klen/mixer) - * modelmommy:为 Django 测试创建随机固件[官网](https://github.com/vandersonmota/modelmommy) -* 代码覆盖率 - * coverage:代码覆盖率测量。[官网](https://pypi.python.org/pypi/coverage) -* 伪数据 - * faker:一个 Python 库,用来生成伪数据。[官网](http://www.joke2k.net/faker/) - * fake2db:伪数据库生成器。[官网](https://github.com/emirozer/fake2db) - * radar:生成随机的日期/时间。[官网](https://pypi.python.org/pypi/radar) -* 错误处理 - * FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。[官网](https://github.com/ajalt/fuckitpy) - -### 代码分析和Lint工具 - -进行代码分析,解析和操作代码库的库和工具。 - -* 代码分析 - * coala:语言独立和易于扩展的代码分析应用程序。[官网](http://coala-analyzer.org/) - * code2flow:把你的 Python 和 JavaScript 代码转换为流程图。[官网](https://github.com/scottrogowski/code2flow) - * pycallgraph:这个库可以把你的Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) - * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) -* Lint工具 - * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) - * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) - * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) -* 代码格式化 - * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) - -### Debugging Tools - -用来进行代码调试的库。 - -* 调试器 - * ipdb:IPython 启用的 [pdb](https://docs.python.org/2/library/pdb.html)。[官网](https://pypi.python.org/pypi/ipdb) - * pudb:全屏,基于控制台的 Python 调试器。[官网](https://pypi.python.org/pypi/pudb) - * pyringe:可以在 Python 进程中附加和注入代码的调试器。[官网](https://github.com/google/pyringe) - * wdb:一个奇异的 web 调试器,通过 WebSockets 工作。[官网](https://github.com/Kozea/wdb) - * winpdb:一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。[官网](http://winpdb.org/) - * django-debug-toolbar:为 Django 显示各种调试信息。[官网](https://github.com/django-debug-toolbar/django-debug-toolbar) - * django-devserver:一个 Django 运行服务器的替代品。[官网](https://github.com/dcramer/django-devserver) - * flask-debugtoolbar:django-debug-toolbar 的 flask 版。[官网](https://github.com/mgood/flask-debugtoolbar) -* 性能分析器 - * lineprofiler:逐行性能分析。[官网](https://github.com/rkern/lineprofiler) - * [Memory Profiler](http://hao.jobbole.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) - * profiling:一个交互式 Python 性能分析工具。[官网](https://github.com/what-studio/profiling) -* 其他 - * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) - * python-statsd:[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。[官网](https://github.com/WoLpH/python-statsd) - -### Science and Data Analysis - -用来进行科学计算和数据分析的库。 - -* astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) -* [bcbio-nextgen](http://hao.jobbole.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) -* bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) -* Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) -* [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) -* [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) -* NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) -* Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) -* Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) -* [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) -* Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) -* [Open Mining](http://hao.jobbole.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) -* [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) -* Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) -* PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) -* [PyMC](http://hao.jobbole.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) -* RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) -* [SciPy](http://hao.jobbole.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) -* [statsmodels](http://hao.jobbole.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) -* SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) -* zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) -* [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) -* keras: 以tensorflow或者theano为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) - -### 数据可视化 - -进行数据可视化的库。 参见: [awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)。 - -* matplotlib:一个 Python 2D 绘图库。[官网](http://matplotlib.org/) -* bokeh:用 Python 进行交互式 web 绘图。[官网](https://github.com/bokeh/bokeh) -* ggplot:ggplot2 给 R 提供的 API 的 Python 版本。[官网](https://github.com/yhat/ggplot) -* plotly:协同 Python 和 matplotlib 工作的 web 绘图库。[官网](https://plot.ly/python/) -* pygal:一个 Python SVG 图表创建工具。[官网](http://www.pygal.org/en/latest/) -* pygraphviz:Graphviz 的 Python 接口。[官网](https://pypi.python.org/pypi/pygraphviz) -* PyQtGraph:交互式实时2D/3D/图像绘制及科学/工程学组件。[官网](http://www.pyqtgraph.org/) -* SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。[官网](http://jiffyclub.github.io/snakeviz/) -* vincent:把 Python 转换为 Vega 语法的转换工具。[官网](https://github.com/wrobstory/vincent) -* VisPy:基于 OpenGL 的高性能科学可视化工具。[官网](http://vispy.org/) - -### 计算机视觉 - -计算机视觉库。 - -* OpenCV:开源计算机视觉库。[官网](http://opencv.org/) -*   pyocr:Tesseract和Cuneiform的包装库。[官网](https://github.com/jflesch/pyocr) -*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr)的另一包装库。[官网](https://github.com/madmaze/pytesseract) -* [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) - -### 机器学习 - -机器学习库。 参见: [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python). - -* Crab:灵活、快速的推荐引擎。[官网](https://github.com/muricoca/crab) -* gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) -* hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) -* NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) -* pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) -* [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) -* [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) -* [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) -* scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) -* pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) -* vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) -* skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) - -### MapReduce - -MapReduce 框架和库。 - -* [dpark](http://hao.jobbole.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) -* dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。[官网](https://github.com/klbostee/dumbo) -* luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) -* mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) -* PySpark:Spark 的 Python API 。[官网](http://spark.apache.org/docs/latest/programming-guide.html) -* streamparse:运行针对事实数据流的 Python 代码。集成了[Apache Storm](http://storm.apache.org/)。[官网](https://github.com/Parsely/streamparse) - -### 函数式编程 - -使用 Python 进行函数式编程。 - -* CyToolz:Toolz 的 Cython 实现 : 高性能函数式工具。[官网](https://github.com/pytoolz/cytoolz/) -* fn.py:在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。[官网](https://github.com/kachayev/fn.py) -* funcy:炫酷又实用的函数式工具。[官网](https://github.com/Suor/funcy) -* Toolz:一组用于迭代器,函数和字典的函数式编程工具。[官网](https://github.com/pytoolz/toolz) - -### 第三方 API - -用来访问第三方 API的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 - -* apache-libcloud:一个为各种云设计的 Python 库。[官网](https://libcloud.apache.org/) -* boto:Amazon Web Services 的 Python 接口。[官网](https://github.com/boto/boto) -* django-wordpress:WordPress models and views for Django.[官网](https://github.com/sunlightlabs/django-wordpress/) -* facebook-sdk:Facebook 平台的 Python SDK.[官网](https://github.com/mobolic/facebook-sdk) -* facepy:Facepy 让和 Facebook's Graph API 的交互变得更容易。[官网](https://github.com/jgorset/facepy) -* gmail:Gmail 的 Python 接口。[官网](https://github.com/charlierguo/gmail) -* google-api-python-client:Python 用的 Google APIs 客户端库。[官网](https://github.com/google/google-api-python-client) -* gspread:Google 电子表格的 Python API.[官网](https://github.com/burnash/gspread) -* twython:Twitter API 的封装。[官网](https://github.com/ryanmcgrath/twython) - -### DevOps 工具 - -用于 DevOps 的软件和库。 - -* Ansible:一个非常简单的 IT 自动化平台。[官网](https://github.com/ansible/ansible) -* SaltStack:基础设施自动化和管理系统。[官网](https://github.com/saltstack/salt) -* OpenStack:用于构建私有和公有云的开源软件。[官网](http://www.openstack.org/) -* Docker Compose:快速,分离的开发环境,使用 Docker。[官网](https://docs.docker.com/compose/) -* Fabric:一个简单的,Python 风格的工具,用来进行远程执行和部署。[官网](http://www.fabfile.org/) -* cuisine:为 Fabric 提供一系列高级函数。[官网](https://github.com/sebastien/cuisine) -* Fabtools:一个用来编写超赞的 Fabric 文件的工具。[官网](https://github.com/ronnix/fabtools) -* gitapi:Git 的纯 Python API。[官网](https://bitbucket.org/haard/gitapi) -* hgapi:Mercurial 的纯 Python API。[官网](https://bitbucket.org/haard/hgapi) -* honcho:[Foreman](https://github.com/ddollar/foreman)的 Python 克隆版,用来管理基于[Procfile](https://devcenter.heroku.com/articles/procfile)的应用。[官网](https://github.com/nickstenning/honcho) -* pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。[官网](https://github.com/pexpect/pexpect) -* psutil:一个跨平台进程和系统工具模块。[官网](https://github.com/giampaolo/psutil) -* supervisor:UNIX 的进程控制系统。[官网](https://github.com/Supervisor/supervisor) - -### 任务调度 - -任务调度库。 - -* APScheduler:轻巧但强大的进程内任务调度,使你可以调度函数。[官网](http://apscheduler.readthedocs.org/en/latest/) -* django-schedule:一个 Django 排程应用。[官网](https://github.com/thauber/django-schedule) -* doit:一个任务执行和构建工具。[官网](http://pydoit.org/) -* gunnery:分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。[官网](https://github.com/gunnery/gunnery) -* Joblib:一组为 Python 提供轻量级作业流水线的工具。[官网](http://pythonhosted.org/joblib/index.html) -* Plan:如有神助地编写 crontab 文件。[官网](https://github.com/fengsp/plan) -* schedule:人性化的 Python 任务调度库。[官网](https://github.com/dbader/schedule) -* Spiff:使用纯 Python 实现的强大的工作流引擎。[官网](https://github.com/knipknap/SpiffWorkflow) -* TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。[官网](http://docs.openstack.org/developer/taskflow/) - -### 外来函数接口 - -使用外来函数接口的库。 - -* cffi:用来调用 C 代码的外来函数接口。[官网](https://pypi.python.org/pypi/cffi) -* [ctypes](http://hao.jobbole.com/ctypes/):(Python 标准库) 用来调用 C 代码的外来函数接口。[官网](https://docs.python.org/2/library/ctypes.html) -* PyCUDA:Nvidia CUDA API 的封装。[官网](https://mathema.tician.de/software/pycuda/) -* SWIG:简化的封装和接口生成器。[官网](http://www.swig.org/Doc1.3/Python.html) - -### 高性能 - -让 Python 更快的库。 - -* Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。[官网](http://cython.org/) -* PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。[官网](https://github.com/Maratyszcza/PeachPy) -* PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。[官网](http://pypy.org/) -* [Pyston](http://hao.jobbole.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) -* Stackless Python:一个强化版的 Python。[官网](https://bitbucket.org/stackless-dev/stackless/overview) - -### 微软的 Windows平台 - -在 Windows 平台上进行 Python 编程。 - -* Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。[官网](http://python-xy.github.io/) -* pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。[官网](http://www.lfd.uci.edu/~gohlke/pythonlibs/) -* PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。[官网](https://github.com/pythonnet/pythonnet) -* PyWin32:针对 Windows 的Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) -* WinPython:Windows 7/8 系统下便携式开发环境。[官网](https://winpython.github.io/) - -### 网络可视化和SDN - -用来进行网络可视化和SDN(软件定义网络)的工具和库。 - -* Mininet:一款流行的网络模拟器以及用 Python 编写的 API。[官网](http://mininet.org/) -* POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。[官网](https://github.com/noxrepo/pox) -* Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。[官网](http://frenetic-lang.org/pyretic/) -* SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。[官网](https://github.com/sdn-ixp/internet2award) - -### 硬件 - -用来对硬件进行编程的库。 - -* ino:操作[Arduino](https://www.arduino.cc/)的命令行工具。[官网](http://inotool.org/) -* Pyro:Python 机器人编程库。[官网](http://pyrorobotics.com/) -* PyUserInput:跨平台的,控制鼠标和键盘的模块。[官网](https://github.com/SavinaRoja/PyUserInput) -* scapy:一个非常棒的操作数据包的库。[官网](https://github.com/secdev/scapy) -* wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。[官网](https://wifi.readthedocs.org/en/latest/) -* Pingo:Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。[官网](http://www.pingo.io/) - -### 兼容性 - -帮助从 Python 2 向 Python 3迁移的库。 - -* Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。[官网](http://python-future.org/index.html) -* Python-Modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。[官网](https://github.com/mitsuhiko/python-modernize) -* Six:Python 2 和 3 的兼容性工具。[官网](https://pypi.python.org/pypi/six) - -### 杂项 - -不属于上面任何一个类别,但是非常有用的库。 - -* blinker:一个快速的 Python 进程内信号/事件分发系统。[官网](https://github.com/jek/blinker) -* itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) -* pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) -* Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) -* [Tryton](http://hao.jobbole.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) - -### 算法和设计模式 - -Python 实现的算法和设计模式。 - -* [algorithms](http://hao.jobbole.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) -* python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) -* sortedcontainers:快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) - -### 编辑器插件 - -编辑器和 IDE 的插件 - -* Emacs - * Elpy:Emacs Python 开发环境。[官网](https://github.com/jorgenschaefer/elpy) -* Sublime Text - * SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。[官网](https://github.com/srusskih/SublimeJEDI) - * Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。[官网](https://github.com/DamnWidget/anaconda) -* Vim - * [YouCompleteMe](http://hao.jobbole.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) - * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) - * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) -* Visual Studio - * PTVS:Visual Studio 的 Python 工具[官网](https://github.com/Microsoft/PTVS) - -### 集成开发环境 - -流行的 Python 集成开发环境。 - -* PyCharm:商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。[官网](https://www.jetbrains.com/pycharm/) -* LiClipse:基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。[官网](http://www.liclipse.com/) -* Spyder:开源 Python IDE。[官网](https://github.com/spyder-ide/spyder) - -### 自动聊天工具 - -用于开发聊天机器人的库 - -*   Errbot:最简单和最流行的聊天机器人用来实现自动聊天工具。[官网](http://errbot.io/en/latest/) - -## 服务 - -在线工具和简化开发的 API 。 - -### 持续集成 - -参见: [awesome-CIandCD](https://github.com/ciandcd/awesome-ciandcd#online-build-system). - -* Travis CI:一个流行的工具,为你的开源和[私人](https://travis-ci.com/)项目提供持续集成服务。(仅支持 GitHub)[官网](https://travis-ci.org/) -* CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)[官网](https://circleci.com/) -* Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。[官网](https://vexor.io/) -* Wercker:基于 Docker 平台,用来构建和部署微服务。[官网](http://wercker.com/) - -### 代码质量 - -* Codacy:自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。[官网](https://www.codacy.com/) -* QuantifiedCode:一个数据驱动、自动、持续的代码审查工具。[官网](https://www.quantifiedcode.com/) - -## 资源 - -在这里可以找到新的 Python 库。 - -### 网站 - -* [r/Python](https://www.reddit.com/r/python) -* [CoolGithubProjects](https://www.coolgithubprojects.com/) -* [Django Packages](https://www.djangopackages.com/) -* [Full Stack Python](http://www.fullstackpython.com/) -* [Python 3 Wall of Superpowers](http://python3wos.appspot.com/) -* [Python Hackers](http://pythonhackers.com/open-source/) -* [Python ZEEF](https://python.zeef.com/alan.richmond) -* [Trending Python repositories on GitHub today](https://github.com/trending?l=python) -* [PyPI Ranking](http://pypi-ranking.info/alltime) - -### 周刊 - -* [Import Python Newsletter](http://importpython.com/newsletter/) -* [Pycoder's Weekly](http://pycoders.com/) -* [Python Weekly](http://www.pythonweekly.com/) - -### Twitter - -* [@codetengu](https://twitter.com/codetengu) -* [@getpy](https://twitter.com/getpy) -* [@planetpython](https://twitter.com/planetpython) -* [@pycoders](https://twitter.com/pycoders) -* [@pypi](https://twitter.com/pypi) -* [@pythontrending](https://twitter.com/pythontrending) -* [@PythonWeekly](https://twitter.com/PythonWeekly) - -### 学习指南 -* [Scipy-lecture-notes](http://hao.jobbole.com/scipy-lecture-notes/):如何用Python来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) -* [SScientific-python-lectures](http://hao.jobbole.com/scientific-python-lectures/):Python科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) -* [Mario-Level-1](http://hao.jobbole.com/mario-level-1/):用Python和Pygame写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) -* [Python Koans](http://hao.jobbole.com/python-koans/):Python的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) -* [Minecraft](http://hao.jobbole.com/minecraft-python/):用python写的Minecraft游戏。[官网](https://github.com/fogleman/Minecraft) -* [pycrumbs](http://hao.jobbole.com/python-pycrumbs/):Python资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) -* [python-patterns](http://hao.jobbole.com/python-patterns/):使用python实现设计模式。[官网](https://github.com/faif/python-patterns) -* [Projects](http://hao.jobbole.com/python-projects/):Python项目大集合。[官网](https://github.com/karan/Projects) -* [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的Python学习指南。[官网](http://docs.python-guide.org/en/latest/) -* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像Python高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html) - -

知名网站

-*值得关注的 Python 技术站点。* - -

中文站点

- -* 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。[官网](http://python.jobbole.com/) - -

英文站点

- -* 《[值得关注的 10 个 Python 英文博客](http://python.jobbole.com/81730/)》 - -

微博、微信公众号

-* Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) -* Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享Python技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。 -
+# Python 资源大全中文版 + +我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。 + +Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 + +* * * + +### 我们要做什么? + +- 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 +- 整理后的内容,将收录在[伯乐在线资源频道](http://hao.jobbole.com/)。可参考已整理的内容: + - 《[Scrapy:Python的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 + - 《[Flask:一个使用Python编写的轻量级Web应用框架](http://hao.jobbole.com/flask/)》 + +* * * + +### 如何参与本项目? + +从下面的目录来看,本项目的工作量小不了,所以非常期待能有更多程序员一起来参与。 + +不过加入前,有几个小要求: + +* 英文还不错,能读懂英文并用自己的话复述; +* 在用 Python; + +如有兴趣,请加 QQ:50872495。加 Q 时请注明「Python大全」 + +* * * + +### 如何为列表贡献新资源? + +欢迎大家为列表贡献高质量的新资源,提交PR时请参照以下要求: + +* 请确保推荐的资源自己使用过 +* 提交PR时请注明推荐理由 + +资源列表管理收到PR请求后,会定期(每周)在微博转发本周提交的PR列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 + +感谢您的贡献! + +* * * + +### 本项目的参与者 + +- 维护者: +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/) + +注:名单不分排名,不定期补充更新 + +* * * + +### 奖励计划 + +虽然奖励可能并不是你加入的主要原因,但还是有必要提一下: + +* 整理超过 20 个资源后,可在伯乐在线上开通打赏; +* 每整理 20 个资源,有机会获得技术书籍或各种有意思的创意、极客产品; +* [奖励详情](http://hao.jobbole.com/rewards/) + +* * * + +### 环境管理 + +管理 Python 版本和环境的工具 + +* p:非常简单的交互式 python 版本管理工具。[官网](https://github.com/qw3rtman/p) +* pyenv:简单的 Python 版本管理工具。[官网](https://github.com/yyuu/pyenv) +* Vex:可以在虚拟环境中执行命令。[官网](https://github.com/sashahart/vex) +* virtualenv:创建独立 Python 环境的工具。[官网](https://pypi.python.org/pypi/virtualenv) +* virtualenvwrapper:virtualenv 的一组扩展。[官网](https://pypi.python.org/pypi/virtualenvwrapper) + +### 包管理 + +管理包和依赖的工具。 + +* pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) +* pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) +* conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) +* Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) +* wheel:Python 分发的新标准,意在取代 eggs。[官网](http://pythonwheels.com/) + +### 包仓库 + +本地 PyPI 仓库服务和代理。 + +* warehouse:下一代 PyPI。[官网](https://github.com/pypa/warehouse) + * Warehouse:PyPA 提供的 PyPI 镜像工具。[官网](https://warehouse.python.org/) [bandersnatch](https://bitbucket.org/pypa/bandersnatch) +* devpi:PyPI 服务和打包/测试/分发工具。[官网](http://doc.devpi.net/) +* localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。[官网](https://github.com/mvantellingen/localshop) + +### 分发 + +打包为可执行文件以便分发。 + +* PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。[官网](https://github.com/pyinstaller/pyinstaller) +* dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。[官网](http://dh-virtualenv.readthedocs.org/) +* Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。[官网](http://nuitka.net/) +* py2app:将 Python 脚本变为独立软件包(Mac OS X)。[官网](http://pythonhosted.org/py2app/) +* py2exe:将 Python 脚本变为独立软件包(Windows)。[官网](http://www.py2exe.org/) +* pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。[官网](http://pynsist.readthedocs.org/) + +### 构建工具 + +将源码编译成软件。 + +* buildout:一个构建系统,从多个组件来创建,组装和部署应用。[官网](http://www.buildout.org/) +* BitBake:针对嵌入式 Linux 的类似 make 的构建工具。[官网](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html) +* fabricate:对任何语言自动找到依赖关系的构建工具。[官网](https://code.google.com/archive/p/fabricate) +* PlatformIO:多平台命令行构建工具。[官网](https://github.com/platformio/platformio) +* PyBuilder:纯 Python 实现的持续化构建工具。[官网](https://github.com/pybuilder/pybuilder) +* SCons:软件构建工具。[官网](http://www.scons.org/) + +### 交互式解析器 + +交互式 Python 解析器。 + +* IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) +* [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) +* ptpython:高级交互式Python解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) + +### 文件 + +文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 + +* imghdr:(Python 标准库)检测图片类型。[官网](https://docs.python.org/2/library/imghdr.html) +* mimetypes:(Python 标准库)将文件名映射为 MIME 类型。[官网](https://docs.python.org/2/library/mimetypes.html) +* path.py:对 os.path 进行封装的模块。[官网](https://github.com/jaraco/path.py) +* pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。[官网](https://pathlib.readthedocs.org/en/pep428/) +* python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。[官网](https://github.com/ahupp/python-magic) +* Unipath:用面向对象的方式操作文件和目录。[官网](https://github.com/mikeorr/Unipath) +* watchdog:管理文件系统事件的 API 和 shell 工具[官网](https://github.com/gorakhargosh/watchdog) + +### 日期和时间 + +操作日期和时间的类库。 + +* arrow:更好的 Python 日期时间操作类库。[官网](https://github.com/crsmithdev/arrow) +* Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) +* dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) +* delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) +* moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。[官网](https://github.com/zachwill/moment) +* PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) +* pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。[官网](https://launchpad.net/pytz) +* when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) + +### 文本处理 + +用于解析和操作文本的库。 + +* 通用 + * [chardet](http://hao.jobbole.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) + * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) + * ftfy:让Unicode文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) + * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) + * Levenshtein:快速计算编辑距离以及字符串的相似度。[官网](https://github.com/ztane/python-Levenshtein/) + * pangu.py:在中日韩语字符和数字字母之间添加空格。[官网](https://github.com/vinta/pangu.py) + * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python实现。 + * shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。[官网](https://github.com/stochastic-technologies/shortuuid) + * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) + * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) + * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) + * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) +* Slug化 + * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) + * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) + * unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。[官网](https://github.com/mozilla/unicode-slugify) +* 解析器 + * phonenumbers:解析,格式化,储存,验证电话号码。[官网](https://github.com/daviddrysdale/python-phonenumbers) + * PLY:lex 和 yacc 解析工具的 Python 实现。[官网](http://www.dabeaz.com/ply/) + * Pygments:通用语法高亮工具。[官网](http://pygments.org/) + * pyparsing:生成通用解析器的框架。[官网](http://pyparsing.wikispaces.com/) + * python-nameparser:把一个人名分解为几个独立的部分。[官网](https://github.com/derek73/python-nameparser) + * python-user-agents:浏览器 user agent 解析器。[官网](https://github.com/selwin/python-user-agents) + * sqlparse:一个无验证的 SQL 解析器。[官网](https://sqlparse.readthedocs.org/en/latest/) + +### 特殊文本格式处理 + +一些用来解析和操作特殊文本格式的库。 + +* 通用 + * tablib:一个用来处理中表格数据的模块。[官网](https://github.com/kennethreitz/tablib) +* Office + * Marmir:把输入的Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) + * openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。[官网](https://openpyxl.readthedocs.org/en/latest/) + * python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。[官网](https://github.com/python-openxml/python-docx) + * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) + * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) + * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) + * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) + * relatorio:模板化OpenDocument 文件。[官网](http://relatorio.tryton.org/) +* PDF + * PDFMiner:一个用于从PDF文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) + * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) + * ReportLab:快速创建富文本 PDF 文档。[官网](http://www.reportlab.com/opensource/) +* Markdown + * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) + * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) + * Python-Markdiwn2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) +* YAML + * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) +* CSV + * csvkit:用于转换和操作 CSV 的工具。[官网](https://github.com/wireservice/csvkit) +* Archive + * unp:一个用来方便解包归档文件的命令行工具。[官网](https://github.com/mitsuhiko/unp) + +### 自然语言处理 + +用来处理人类语言的库。 + +* [NLTK](http://hao.jobbole.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) +* jieba:中文分词工具。[官网](https://github.com/fxsjy/jieba) +* langid.py:独立的语言识别系统。[官网](https://github.com/saffsd/langid.py) +* Pattern:Python 网络信息挖掘模块。[官网](http://www.clips.ua.ac.be/pattern) +* SnowNLP:一个用来处理中文文本的库。[官网](https://github.com/isnowfy/snownlp) +* TextBlob:为进行普通自然语言处理任务提供一致的 API。[官网](http://textblob.readthedocs.org/en/latest/) +* TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。[官网](https://github.com/2shou/TextGrocery) + +### 文档 + +用以生成项目文档的库。 + +* [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) + * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) +* MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) +* pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) +* Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) + +### 配置 + +用来保存和解析配置的库。 + +* config:[logging](https://docs.python.org/2/library/logging.html) 模块作者写的分级配置模块。[官网](https://www.red-dove.com/config-doc/) +* ConfigObj:INI 文件解析器,带验证功能。[官网](http://www.voidspace.org.uk/python/configobj.html) +* ConfigParser:(Python 标准库) INI 文件解析器。[官网](https://docs.python.org/2/library/configparser.html) +* profig:通过多种格式进行配置,具有数值转换功能。[官网](http://profig.readthedocs.org/en/default/) +* python-decouple:将设置和代码完全隔离。[官网](https://github.com/henriquebastos/python-decouple) + +### 命令行工具 + +用于创建命令行程序的库。 + +* 命令行程序开发 + * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级API。[官网](https://github.com/peterbrittain/asciimatics) + * cement:Python 的命令行程序框架。[官网](http://builtoncement.com/) + * click:一个通过组合的方式来创建精美命令行界面的包。[官网](http://click.pocoo.org/dev/) + * cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。[官网](http://docs.openstack.org/developer/cliff/) + * clint:Python 命令行程序工具。[官网](https://github.com/kennethreitz/clint) + * colorama:跨平台彩色终端文本。[官网](https://pypi.python.org/pypi/colorama) + * docopt:Python 风格的命令行参数解析器。[官网](http://docopt.org/) + * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) + * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) + * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](https://github.com/Russell91/pythonpy/wiki) +* 生产力工具 + * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) + * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) + * caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。[官网](https://github.com/brettcannon/caniusepython3) + * cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。[官网](https://github.com/audreyr/cookiecutter) + * doitlive:一个用来在终端中进行现场演示的工具。[官网](https://github.com/sloria/doitlive) + * howdoi:通过命令行获取即时的编程问题解答。[官网](https://github.com/gleitz/howdoi) + * httpie:一个命令行HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) + * PathPicker:从bash输出中选出文件。[官网](https://github.com/facebook/PathPicker) + * percol:向UNIX shell 传统管道概念中加入交互式选择功能。[官网](https://github.com/mooz/percol) + * SAWS:一个加强版的 AWS 命令行。[官网](https://github.com/donnemartin/saws) + * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) + * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) + * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) +    *   try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) + +### 下载器 + +用来进行下载的库. + +* s3cmd:一个用来管理Amazon S3 和 CloudFront 的命令行工具。[官网](https://github.com/s3tools/s3cmd) +* s4cmd:超级 S3 命令行工具,性能更加强劲。[官网](https://github.com/bloomreach/s4cmd) +* you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。[官网](https://www.soimort.org/you-get/) +* youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。[官网](http://rg3.github.io/youtube-dl/) + +### 图像处理 + +用来操作图像的库. + +* [pillow](http://hao.jobbole.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) +* hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) +* imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) +* nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) +* pyBarcode:不借助 PIL 库在 Python 程序中生成条形码。[官网](https://pythonhosted.org/pyBarcode/) +* pygram:类似 Instagram 的图像滤镜。[官网](https://github.com/ajkumar25/pygram) +* python-qrcode:一个纯 Python 实现的二维码生成器。[官网](https://github.com/lincolnloop/python-qrcode) +* Quads:基于四叉树的计算机艺术。[官网](https://github.com/fogleman/Quads) +* scikit-image:一个用于(科学)图像处理的 Python 库。[官网](http://scikit-image.org/) +* thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。[官网](https://github.com/thumbor/thumbor) +* wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的Python 绑定。MagickWand 是 ImageMagick的 C API 。[官网](https://github.com/dahlia/wand) + +### OCR + +光学字符识别库。 + +* pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) +* [pytesseract](http://hao.jobbole.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) +* python-tesseract - [Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 + +### 音频 + +用来操作音频的库 + +* audiolazy:Python 的数字信号处理包。[官网](https://github.com/danilobellini/audiolazy) +* audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) +* beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具[官网](http://beets.io/) +* dejavu:音频指纹提取和识别[官网](https://github.com/worldveil/dejavu) +* [django-elastic-transcoder](http://hao.jobbole.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) +* eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) +* id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) +* m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) +* mutagen:一个用来处理音频元数据的 Python 模块。[官网](https://bitbucket.org/lazka/mutagen) +* pydub:通过简单、简洁的高层接口来操作音频文件。[官网](https://github.com/jiaaro/pydub) +* pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端[官网](https://github.com/echonest/pyechonest) +* talkbox:一个用来处理演讲/信号的 Python 库[官网](http://scikits.appspot.com/talkbox) +* TimeSide:开源 web 音频处理框架。[官网](https://github.com/Parisson/TimeSide) +* tinytag:一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) +* mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。[官网](http://bspaans.github.io/python-mingus/) + +### Video + +用来操作视频和GIF的库。 + +* moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。[官网](http://zulko.github.io/moviepy/) +* scikit-video:SciPy 视频处理常用程序。[官网](https://github.com/aizvorski/scikit-video) + +### 地理位置 + +地理编码地址以及用来处理经纬度的库。 + +* GeoDjango:世界级地理图形 web 框架。[官网](https://docs.djangoproject.com/en/dev/ref/contrib/gis/) +* GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。[官网](https://github.com/maxmind/geoip-api-python) +* geojson:GeoJSON 的 Python 绑定及工具。[官网](https://github.com/frewsxcv/python-geojson) +* geopy:Python 地址编码工具箱。[官网](https://github.com/geopy/geopy) +* pygeoip:纯 Python GeoIP API。[官网](https://github.com/appliedsec/pygeoip) +* django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。[官网](https://github.com/SmileyChris/django-countries) + +### HTTP + +使用HTTP的库。 + +* requests:人性化的HTTP请求库。[官网](http://docs.python-requests.org/en/latest/) +* grequests:requests 库 + gevent ,用于异步 HTTP 请求.[官网](https://github.com/kennethreitz/grequests) +* httplib2:全面的 HTTP 客户端库。[官网](https://github.com/jcgregorio/httplib2) +* treq:类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。[官网](https://github.com/twisted/treq) +* urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。[官网](https://github.com/shazow/urllib3) + +### 数据库 + +Python实现的数据库。 + +* pickleDB:一个简单,轻量级键值储存数据库。[官网](https://pythonhosted.org/pickleDB/) +* PipelineDB:流式 SQL 数据库。[官网](https://www.pipelinedb.com/) +* TinyDB:一个微型的,面向文档型数据库。[官网](https://github.com/msiemens/tinydb) +* ZODB:一个 Python 原生对象数据库。一个键值和对象图数据库。[官网](http://www.zodb.org/en/latest/) + +### 数据库驱动 + +用来连接和操作数据库的库。 + +* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 + * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) + * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 + * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) + * PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。[官网](https://github.com/PyMySQL/PyMySQL) +* PostgreSQL + * psycopg2:Python 中最流行的 PostgreSQL 适配器。[官网](http://initd.org/psycopg/) + * queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。[官网](https://github.com/gmr/queries) + * txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。[官网](http://txpostgres.readthedocs.org/en/latest/) +* 其他关系型数据库 + * apsw:另一个 Python SQLite封装。[官网](http://rogerbinns.github.io/apsw/) + * dataset:在数据库中存储Python字典 + * pymssql:一个简单的Microsoft SQL Server数据库接口。[官网](http://www.pymssql.org/en/latest/) +* NoSQL 数据库 + * cassandra-python-driver:Cassandra 的 Python 驱动。[官网](https://github.com/datastax/python-driver) + * HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。[官网](http://happybase.readthedocs.org/en/latest/) + * Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。[官网](https://plyvel.readthedocs.org/en/latest/) + * py2neo:Neo4j restful 接口的Python 封装客户端。[官网](http://py2neo.org/2.0/) + * pycassa:Cassandra 的 Python Thrift 驱动。[官网](https://github.com/pycassa/pycassa) + * PyMongo:MongoDB 的官方 Python 客户端。[官网](https://docs.mongodb.org/ecosystem/drivers/python/) + * redis-py:Redis 的 Python 客户端。[官网](https://github.com/andymccurdy/redis-py) + * telephus:基于 Twisted 的 Cassandra 客户端。[官网](https://github.com/driftx/Telephus) + * txRedis:基于 Twisted 的 Redis 客户端。[官网](https://github.com/deldotdr/txRedis) + +### ORM + +实现对象关系映射或数据映射技术的库。 + +* 关系型数据库 + * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) + * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) + * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy)系列 + * [Peewee](http://hao.jobbole.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) + * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) + * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) +* NoSQL 数据库 + * django-mongodb-engine:Django MongoDB 后端。[官网](https://github.com/django-nonrel/mongodb-engine) + * PynamoDB:[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。[官网](https://github.com/jlafon/PynamoDB) + * flywheel:Amazon DynamoDB 的对象映射工具。[官网](https://github.com/mathcamp/flywheel) + * MongoEngine:一个Python 对象文档映射工具,用于 MongoDB。[官网](http://mongoengine.org/) + * hot-redis:为 Redis 提供 Python 丰富的数据类型。[官网](https://github.com/stephenmcd/hot-redis) + * redisco:一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。[官网](https://github.com/kiddouk/redisco) +* 其他 + * butterdb:Google Drive 电子表格的 Python ORM。[官网](https://github.com/Widdershin/butterdb) + +### Web 框架 + +全栈 Web 框架。 + +* [Django](http://hao.jobbole.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) + * [awesome-django](https://gitlab.com/rosarior/awesome-django)系列 +* [Flask](http://hao.jobbole.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) + * [awesome-flask](https://github.com/humiaozuzu/awesome-flask)系列 +* pyramid:一个小巧,快速,接地气的开源Python web 框架。 + * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid)系列 +* [Bottle](http://hao.jobbole.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) +* CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。[官网](http://www.cherrypy.org/) +* TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) +* [web.py](http://hao.jobbole.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) +* web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) +* [Tornado](http://hao.jobbole.com/tornado/):一个web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) + +### 权限 + +允许或拒绝用户访问数据或功能的库。 + +* Carteblanche:Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.[官网](https://github.com/neuman/python-carteblanche/) +* django-guardian:Django 1.2+ 实现了单个对象权限。[官网](https://github.com/django-guardian/django-guardian) +* django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。[官网](https://github.com/dfunckt/django-rules) + +### CMS + +内容管理系统 + +* odoo-cms: 一个开源的,企业级 CMS,基于odoo。[官网](http://www.odoo.com) +* django-cms:一个开源的,企业级 CMS,基于 Django。[官网](http://www.django-cms.org/en/) +* djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。[官网](http://djedi-cms.org/) +* FeinCMS:基于 Django 构建的最先进的内容管理系统之一。[官网](http://www.feincms.org/) +* Kotti:一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。[官网](http://kotti.pylonsproject.org/) +* Mezzanine:一个强大的,持续的,灵活的内容管理平台。[官网](http://mezzanine.jupo.org/) +* Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。[官网](http://opps.github.io/opps/) +* Plone:一个构建于开源应用服务器 Zope 之上的 CMS。[官网](https://plone.org/) +* Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。[官网](http://quokkaproject.org/) +* [Wagtail](http://hao.jobbole.com/wagtail/):一个 Django 内容管理系统。[官网](https://wagtail.io/) +* Widgy:最新的 CMS 框架,基于 Django。[官网](https://wid.gy/) + +### 电子商务 + +用于电子商务以及支付的框架和库。 + +* django-oscar:一个用于 Django 的开源的电子商务框架。[官网](http://oscarcommerce.com/) +* django-shop:一个基于 Django 的店铺系统。[官网](https://github.com/awesto/django-shop) +* Cartridge:一个基于 Mezzanine 构建的购物车应用。[官网](https://github.com/stephenmcd/cartridge) +* shoop:一个基于 Django 的开源电子商务平台。[官网](https://www.shoop.io/en/) +* alipay:非官方的 Python 支付宝 API。[官网](https://github.com/lxneng/alipay) +* merchant:一个可以接收来自多种支付平台支付的 Django 应用。[官网](https://github.com/agiliq/merchant) +* money:货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.[官网](https://github.com/carlospalol/money) +* python-currencies:显示货币格式以及它的数值。[官网](https://github.com/Alir3z4/python-currencies) + +### RESTful API + +用来开发RESTful APIs的库 + +* Django + * [django-rest-framework](http://hao.jobbole.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) + * django-tastypie:为Django 应用开发API。[官网](http://tastypieapi.org/) + * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) +* Flask + * flask-api:为 flask 开发的,可浏览 Web APIs 。[官网](http://www.flaskapi.org/) + * flask-restful:为 flask 快速创建REST APIs 。[官网](http://flask-restful.readthedocs.org/en/latest/) + * flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。[官网](https://flask-restless.readthedocs.org/en/latest/) + * flask-api-utils:为 Flask 处理 API 表示和验证。[官网](https://github.com/marselester/flask-api-utils) + * eve:REST API 框架,由 Flask, MongoDB 等驱动。[官网](https://github.com/nicolaiarocci/eve) +* Pyramid + * cornice:一个Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) +* 与框架无关的 + * falcon:一个用来建立云 API 和 web app 后端的高性能框架。[官网](http://falconframework.org/) + * sandman:为现存的数据库驱动系统自动创建 REST APIs 。[官网](https://github.com/jeffknupp/sandman) + * restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。[官网](http://restless.readthedocs.org/en/latest/) + * ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。[官网](https://github.com/vertical-knowledge/ripozo) + +### 验证 + +实现验证方案的库。 + +* OAuth + * Authomatic:简单但是强大的框架,身份验证/授权客户端。[官网](http://peterhudec.github.io/authomatic/) + * django-allauth:Django 的验证应用。[官网](https://github.com/pennersr/django-allauth) + * django-oauth-toolkit:为 Django 用户准备的 OAuth2。[官网](https://github.com/evonove/django-oauth-toolkit) + * django-oauth2-provider:为 Django 应用提供 OAuth2 接入。[官网](https://github.com/caffeinehit/django-oauth2-provider) + * Flask-OAuthlib:OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。[官网](https://github.com/lepture/flask-oauthlib) + * OAuthLib:一个 OAuth 请求-签名逻辑通用、 完整的实现。[官网](https://github.com/idan/oauthlib) + * python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。[官网](https://github.com/joestump/python-oauth2) + * python-social-auth:一个设置简单的社会化验证方式。[官网](https://github.com/omab/python-social-auth) + * rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。[官网](https://github.com/litl/rauth) + * sanction:一个超级简单的OAuth2 客户端实现。[官网](https://github.com/demianbrecht/sanction) +* 其他 + * jose:JavaScript 对象签名和加密草案的实现。[官网](https://github.com/demonware/jose) + * PyJWT:JSON Web 令牌草案 01。[官网](https://github.com/jpadilla/pyjwt) + * python-jws:JSON Web 签名草案 02 的实现。[官网](https://github.com/brianloveswords/python-jws) + * python-jwt:一个用来生成和验证 JSON Web 令牌的模块。[官网](https://github.com/davedoesdev/python-jwt) + +### 模板引擎 + +模板生成和词法解析的库和工具。 + +* [Jinja2](http://hao.jobbole.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) +* Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) +* Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) +* Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) + +### Queue + +处理事件以及任务队列的库。 + +* celery:一个异步任务队列/作业队列,基于分布式消息传递。[官网](http://www.celeryproject.org/) +* huey:小型多线程任务队列。[官网](https://github.com/coleifer/huey) +* [mrq](http://hao.jobbole.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) +* rq:简单的 Python 作业队列。[官网](http://python-rq.org/) +* simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。[官网](https://github.com/rdegges/simpleq) + +### 搜索 + +对数据进行索引和执行搜索查询的库和软件。 + +* django-haystack:Django 模块化搜索。[官网](https://github.com/django-haystack/django-haystack) +* elasticsearch-py:Elasticsearch 的官方底层 Python 客户端。[官网](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html) +* elasticsearch-dsl-py:Elasticsearch 的官方高级 Python 客户端。[官网](https://github.com/elastic/elasticsearch-dsl-py) +* solrpy:[solr](http://lucene.apache.org/solr/)的 Python 客户端。[官网](https://github.com/edsu/solrpy) +* Whoosh:一个快速的纯 Python 搜索引擎库。[官网](http://whoosh.readthedocs.org/en/latest/) + +### 动态消息 + +用来创建用户活动的库。 + +* django-activity-stream:从你的站点行为中生成通用活动信息流。[官网](https://github.com/justquick/django-activity-stream) +* Stream-Framework:使用 Cassandra 和 Redis 创建动态消息和通知系统。[官网](https://github.com/tschellenbach/Stream-Framework) + +### 资源管理 + +管理、压缩、缩小网站资源的工具。 + +* django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。[官网](https://github.com/django-compressor/django-compressor) +* django-storages:一个针对 Django 的自定义存储后端的工具集合。[官网](http://django-storages.readthedocs.org/en/latest/) +* fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。[官网](http://www.fanstatic.org/en/latest/) +* File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。[官网](http://fileconveyor.org/) +* Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。[官网](http://flask-assets.readthedocs.org/en/latest/) +* jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。[官网](https://github.com/jaysonsantos/jinja-assets-compressor) +* webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。[官网](http://webassets.readthedocs.org/en/latest/) + +### 缓存 + +缓存数据的库。 + +* Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。[官网](http://beaker.readthedocs.org/en/latest/) +* django-cache-machine:Django 模型的自动缓存和失效。[官网](https://github.com/django-cache-machine/django-cache-machine) +* django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。[官网](https://github.com/Suor/django-cacheops) +* django-viewlet:渲染模板,同时具有额外的缓存控制功能。[官网](https://github.com/5monkeys/django-viewlet) +* dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。[官网](http://dogpilecache.readthedocs.org/en/latest/) +* HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。[官网](https://pypi.python.org/pypi/HermesCache) +* johnny-cache:django应用缓存框架。[官网](https://github.com/jmoiron/johnny-cache) +* pylibmc:[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。[官网](https://github.com/lericson/pylibmc) + +### 电子邮件 + +用来发送和解析电子邮件的库。 + +* django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。[官网](https://github.com/StreetVoice/django-celery-ses) +* envelopes:供人类使用的电子邮件库。[官网](http://tomekwojcik.github.io/envelopes/) +* flanker:一个 email 地址和 Mime 解析库。[官网](https://github.com/mailgun/flanker) +* imbox:Python IMAP 库[官网](https://github.com/martinrusev/imbox) +* inbox.py:Python SMTP 服务器。[官网](https://github.com/kennethreitz/inbox.py) +* inbox:一个开源电子邮件工具箱。[官网](https://github.com/nylas/sync-engine) +* lamson:Python 风格的 SMTP 应用服务器。[官网](https://github.com/zedshaw/lamson) +* mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。[官网](https://github.com/WoLpH/mailjet) +* marrow.mailer:高性能可扩展邮件分发框架。[官网](https://github.com/marrow/mailer) +* modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。[官网](https://github.com/tonioo/modoboa) +* pyzmail:创建,发送和解析电子邮件。[官网](http://www.magiksys.net/pyzmail/) +* Talon:Mailgun 库,用来抽取信息和签名。[官网](https://github.com/mailgun/talon) + +### 国际化 + +用来进行国际化的库。 + +* Babel:一个Python 的国际化库。[官网](http://babel.pocoo.org/en/latest/) +* Korean:一个韩语词态库。[官网](https://korean.readthedocs.org/en/latest/) + +### URL处理 + +解析URLs的库 + +* furl:一个让处理 URL 更简单小型 Python 库。[官网](https://github.com/gruns/furl) +* purl:一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。[官网](https://github.com/codeinthehole/purl) +* pyshorteners:一个纯 Python URL 缩短库。[官网](https://github.com/ellisonleao/pyshorteners) +* shorturl:生成短小 URL 和类似 bit.ly 短链的Python 实现。[官网](https://github.com/Alir3z4/python-shorturl) +* webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。[官网](https://github.com/sloria/webargs) + +### HTML处理 + +处理 HTML和XML的库。 + +* BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。[官网](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) +* bleach:一个基于白名单的 HTML 清理和文本链接库。[官网](http://bleach.readthedocs.org/en/latest/) +* cssutils:一个 Python 的 CSS 库。[官网](https://pypi.python.org/pypi/cssutils/) +* html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。[官网](https://github.com/html5lib/html5lib-python) +* lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) +* MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) +* pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) +* untangle:将XML文档转换为Python对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) +* xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) +* xmltodict:像处理 JSON 一样处理 XML。[官网](https://github.com/martinblech/xmltodict) + +爬取网络站点的库 + +* Scrapy:一个快速高级的屏幕爬取及网页采集框架。[官网](http://scrapy.org/) +* cola:一个分布式爬虫框架。[官网](https://github.com/chineking/cola) +* Demiurge:基于PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) +* feedparser:通用 feed 解析器。[官网](http://pythonhosted.org/feedparser/) +* Grab:站点爬取框架。[官网](http://grablib.org/) +* MechanicalSoup:用于自动和网络站点交互的 Python 库。[官网](https://github.com/hickford/MechanicalSoup) +* portia:Scrapy 可视化爬取。[官网](https://github.com/scrapinghub/portia) +* pyspider:一个强大的爬虫系统。[官网](https://github.com/binux/pyspider) +* RoboBrowser:一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。[官网](https://github.com/jmcarp/robobrowser) + +### 网页内容提取 + +用于进行网页内容提取的库。 + +* Haul:一个可以扩展的图像爬取工具。[官网](https://github.com/vinta/Haul) +* html2text:将 HTML 转换为 Markdown 格式文本[官网](https://github.com/Alir3z4/html2text) +* lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) +* micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) +* [newspaper](http://hao.jobbole.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) +* opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。[官网](https://github.com/erikriver/opengraph) +* [python-goose](http://hao.jobbole.com/python-goose/):HTML内容/文章提取器。[官网](https://github.com/grangier/python-goose) +* python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) +* sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) +* sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) +* textract:从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。[官网](https://github.com/deanmalmgren/textract) + +### 表单 + +进行表单操作的库。 + +* Deform:Python HTML 表单生成库,受到了 formish 表单生成库的启发。[官网](http://deform.readthedocs.org/en/latest/) +* django-bootstrap3:集成了 Bootstrap 3 的 Django。[官网](https://github.com/dyve/django-bootstrap3) +* django-crispy-forms:一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。[官网](http://django-crispy-forms.readthedocs.org/en/latest/) +* django-remote-forms:一个平台独立的 Django 表单序列化工具。[官网](https://github.com/WiserTogether/django-remote-forms) +* WTForms:一个灵活的表单验证和呈现库。[官网](http://wtforms.readthedocs.org/en/latest/) +* WTForms-JSON:一个 WTForms 扩展,用来处理 JSON 数据。[官网](http://wtforms-json.readthedocs.org/en/latest/) + +### 数据验证 + +数据验证库。多用于表单验证。 + +* Cerberus:A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition.[官网](http://docs.python-cerberus.org/en/stable/) +* colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。[官网](http://docs.pylonsproject.org/projects/colander/en/latest/) +* kmatch:一种用于匹配/验证/筛选 Python 字典的语言。[官网](https://github.com/ambitioninc/kmatch) +* schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) +* Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) +* valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) +* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) + +### 反垃圾技术 + +帮助你和电子垃圾进行战斗的库。 + +* django-simple-captcha:一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。[官网](https://github.com/mbi/django-simple-captcha) +* django-simple-spam-blocker:一个用于Django的简单的电子垃圾屏蔽工具。[官网](https://github.com/moqada/django-simple-spam-blocker) + +### 标记 + +用来进行标记的库。 + +* django-taggit:简单的 Django 标记工具。[官网](https://github.com/alex/django-taggit) + +### 管理面板 + +管理界面库。 + +* Ajenti:一个你的服务器值得拥有的管理面板。[官网](https://github.com/Eugeny/ajenti) +* django-suit:Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。[官网](http://djangosuit.com/) +* django-xadmin:Django admin 的一个替代品,具有很多不错的功能。[官网](https://github.com/sshwsfc/django-xadmin) +* flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。[官网](https://github.com/flask-admin/flask-admin) +* flower:一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。[官网](https://github.com/mher/flower) +* Grappelli:Django 管理界面的一个漂亮的皮肤。[官网](http://grappelliproject.com/) +* Wooey:一个 Django 应用,可以为 Python 脚本创建 web 用户界面。[官网](https://github.com/wooey/wooey) + +### 静态站点生成器 + +静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。 + +* Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。[官网](http://blog.getpelican.com/) +* Cactus:为设计师设计的静态站点生成器。[官网](https://github.com/koenbok/Cactus/) +* Hyde:基于 Jinja2 的静态站点生成器。[官网](http://hyde.github.io/) +* Nikola:一个静态网站和博客生成器。[官网](https://www.getnikola.com/) +* Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。[官网](http://tinkerer.me/) +* Lektor:一个简单易用的静态 CMS 和博客引擎。[官网](https://www.getlektor.com/) + +### 进程 + +操作系统进程启动及通信库。 + +* envoy:比 Python [subprocess](https://docs.python.org/2/library/subprocess.html) 模块更人性化。[官网](https://github.com/kennethreitz/envoy) +* sarge:另一 种 subprocess 模块的封装。[官网](http://sarge.readthedocs.org/en/latest/) +* sh:一个完备的 subprocess 替代库。[官网](https://github.com/amoffat/sh) + +### 并发和并行 + +用以进行并发和并行操作的库。 + +* multiprocessing:(Python 标准库) 基于进程的“线程”接口。[官网](https://docs.python.org/2/library/multiprocessing.html) +* threading:(Python 标准库)更高层的线程接口。[官网](https://docs.python.org/2/library/threading.html) +* eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) +* gevent:一个基于协程的 Python 网络库,使用[greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) +* Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) +* uvloop:在libuv之上超快速实现asyncio事件循环。[官网](https://github.com/MagicStack/uvloop) + +### 网络 + +用于网络编程的库。 + +* asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) +* [Twisted](http://hao.jobbole.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) +* pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) +* diesel:基于Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) +* pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) +* txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。[官网](https://github.com/smira/txZMQ) + +### WebSocket + +帮助使用WebSocket的库。 + +* AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。[官网](https://github.com/crossbario/autobahn-python) +* Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn).[官网](https://github.com/crossbario/crossbar/) +* django-socketio:给 Django 用的 WebSockets。[官网](https://github.com/stephenmcd/django-socketio) +* WebSocket-for-Python:为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) + +### WSGI 服务器 + +兼容 WSGI 的 web 服务器 + +* gunicorn:Pre-forked, 部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/gunicorn) +* uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。[官网](https://uwsgi-docs.readthedocs.org/en/latest/) +* [bjoern](http://hao.jobbole.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) +* fapws3:异步 (仅对于网络端),由 C 语言编写。[官网](http://www.fapws.org/) +* meinheld:异步,部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/meinheld) +* netius:异步,非常快速。[官网](https://github.com/hivesolutions/netius) +* paste:多线程,稳定,久经考验。[官网](http://pythonpaste.org/) +* rocket:多线程。[官网](https://pypi.python.org/pypi/rocket) +* waitress:多线程, 是它驱动着 Pyramid 框架。[官网](https://waitress.readthedocs.org/en/latest/) +* Werkzeug:一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。[官网](http://werkzeug.pocoo.org/) + +### RPC 服务器 + +兼容 RPC 的服务器。 + +* SimpleJSONRPCServer:这个库是 JSON-RPC 规范的一个实现。[官网](https://github.com/joshmarshall/jsonrpclib/) +* SimpleXMLRPCServer:(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。[官网](https://docs.python.org/2/library/simplexmlrpcserver.html) +* zeroRPC:zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。[官网](https://github.com/0rpc/zerorpc-python) + +### 密码学 + +* cryptography:这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。[官网](https://cryptography.io/en/latest/) +* hashids:在 Python 中实现 [hashids](http://hashids.org/) 。[官网](https://github.com/davidaurelio/hashids-python) +* Paramiko:SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。[官网](http://www.paramiko.org/) +* Passlib:安全密码存储/哈希库,[官网](https://pythonhosted.org/passlib/) +* PyCrypto:Python 密码学工具箱。[官网](https://www.dlitz.net/software/pycrypto/) +* PyNacl:网络和密码学(NaCl) 库的 Python 绑定。[官网](https://github.com/pyca/pynacl) + +### 图形用户界面 + +用来创建图形用户界面程序的库。 + +* curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) +* enaml:使用类似 QML 的Declaratic语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) +* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。[官网](https://kivy.org/) +* pyglet:一个Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) +* PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) +* PySide:P跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4。[官网](https://wiki.qt.io/PySide) +* Tkinter:Tkinter 是 Python GUI 的一个事实标准库。[官网](https://wiki.python.org/moin/TkInter) +* Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。[官网](https://github.com/pybee/toga) +* urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。[官网](http://urwid.org/) +* wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。[官网](http://wxpython.org/) +* PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定[官网](https://wiki.gnome.org/Projects/PyGObject) +* Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。[官网](https://github.com/zoofIO/flexx) + +### 游戏开发 + +超赞的游戏开发库。 + +* Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。[官网](http://cocos2d.org/) +* Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。[官网](https://www.panda3d.org/) +* Pygame:Pygame 是一组 Python 模块,用来编写游戏。[官网](http://www.pygame.org/news.html) +* PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。[官网](http://www.ogre3d.org/tikiwiki/PyOgre) +* PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。[官网](http://pyopengl.sourceforge.net/) +* PySDL2:SDL2 库的封装,基于 ctypes。[官网](http://pysdl2.readthedocs.org/en/latest/) +* RenPy:一个视觉小说(visual novel)引擎。[官网](https://www.renpy.org/) + +### 日志 + +用来生成和操作日志的库。 + +* logging:(Python 标准库) 为 Python 提供日志功能。[官网](https://docs.python.org/2/library/logging.html) +* logbook:Logging 库的替代品。[官网](http://pythonhosted.org/Logbook/) +* Eliot:为复杂的和分布式系统创建日志。[官网](https://eliot.readthedocs.org/en/latest/) +* Raven:Sentry的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) +* Sentry:实时记录和收集日志的服务器。[官网](https://pypi.python.org/pypi/sentry) + +### Testing + +进行代码库测试和生成测试数据的库。 + +* 测试框架 + * unittest:(Python 标准库) 单元测试框架。[官网](https://docs.python.org/2/library/unittest.html) + * nose:nose 扩展了 unittest 的功能。[官网](https://nose.readthedocs.org/en/latest/) + * contexts:一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。[官网](https://github.com/benjamin-hodgson/Contexts) + * hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。[官网](https://github.com/DRMacIver/hypothesis) + * mamba:Python 的终极测试工具, 拥护BDD。[官网](http://nestorsalceda.github.io/mamba/) + * PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。[官网](https://github.com/asweigart/pyautogui) + * pyshould:Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。[官网](https://github.com/drslump/pyshould) + * pytest:一个成熟的全功能 Python 测试工具。[官网](http://pytest.org/latest/) + * green:干净,多彩的测试工具。[官网](https://github.com/CleanCut/green) + * pyvows:BDD 风格的测试工具,受Vows.js的启发。[官网](http://heynemann.github.io/pyvows/)- + * Robot Framework:一个通用的自动化测试框架。[官网](https://github.com/robotframework/robotframework) +* Web 测试 + * Selenium:[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。[官网](https://pypi.python.org/pypi/selenium) + * locust:使用 Python 编写的,可扩展的用户加载测试工具。[官网](https://github.com/locustio/locust) + * sixpack:一个和语言无关的 A/B 测试框架。[官网](https://github.com/seatgeek/sixpack) + * splinter:开源的 web 应用测试工具。[官网](https://splinter.readthedocs.org/en/latest/) +* Mock测试 + * mock:(Python 标准库) 一个用于伪造测试的库。[官网](https://docs.python.org/3/library/unittest.mock.html) + * doublex:Python 的一个功能强大的 doubles  测试框架。[官网](https://pypi.python.org/pypi/doublex) + * freezegun:通过伪造日期模块来生成不同的时间。[官网](https://github.com/spulec/freezegun) + * httmock:针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。[官网](https://github.com/patrys/httmock) + * httpretty:Python 的 HTTP 请求 mock 工具。[官网](http://falcao.it/HTTPretty/) + * responses:伪造 Python 中的 requests 库的一个通用库。[官网](https://github.com/getsentry/responses) + * VCR.py:在你的测试中记录和重放 HTTP 交互。[官网](https://github.com/kevin1024/vcrpy) +* 对象工厂 + * factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。[官网](https://github.com/rbarrois/factoryboy) + * mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。[官网](https://github.com/klen/mixer) + * modelmommy:为 Django 测试创建随机固件[官网](https://github.com/vandersonmota/modelmommy) +* 代码覆盖率 + * coverage:代码覆盖率测量。[官网](https://pypi.python.org/pypi/coverage) +* 伪数据 + * faker:一个 Python 库,用来生成伪数据。[官网](http://www.joke2k.net/faker/) + * fake2db:伪数据库生成器。[官网](https://github.com/emirozer/fake2db) + * radar:生成随机的日期/时间。[官网](https://pypi.python.org/pypi/radar) +* 错误处理 + * FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。[官网](https://github.com/ajalt/fuckitpy) + +### 代码分析和Lint工具 + +进行代码分析,解析和操作代码库的库和工具。 + +* 代码分析 + * coala:语言独立和易于扩展的代码分析应用程序。[官网](http://coala-analyzer.org/) + * code2flow:把你的 Python 和 JavaScript 代码转换为流程图。[官网](https://github.com/scottrogowski/code2flow) + * pycallgraph:这个库可以把你的Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) + * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) +* Lint工具 + * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) + * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) + * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) +* 代码格式化 + * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) + +### Debugging Tools + +用来进行代码调试的库。 + +* 调试器 + * ipdb:IPython 启用的 [pdb](https://docs.python.org/2/library/pdb.html)。[官网](https://pypi.python.org/pypi/ipdb) + * pudb:全屏,基于控制台的 Python 调试器。[官网](https://pypi.python.org/pypi/pudb) + * pyringe:可以在 Python 进程中附加和注入代码的调试器。[官网](https://github.com/google/pyringe) + * wdb:一个奇异的 web 调试器,通过 WebSockets 工作。[官网](https://github.com/Kozea/wdb) + * winpdb:一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。[官网](http://winpdb.org/) + * django-debug-toolbar:为 Django 显示各种调试信息。[官网](https://github.com/django-debug-toolbar/django-debug-toolbar) + * django-devserver:一个 Django 运行服务器的替代品。[官网](https://github.com/dcramer/django-devserver) + * flask-debugtoolbar:django-debug-toolbar 的 flask 版。[官网](https://github.com/mgood/flask-debugtoolbar) +* 性能分析器 + * lineprofiler:逐行性能分析。[官网](https://github.com/rkern/lineprofiler) + * [Memory Profiler](http://hao.jobbole.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) + * profiling:一个交互式 Python 性能分析工具。[官网](https://github.com/what-studio/profiling) +* 其他 + * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) + * python-statsd:[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。[官网](https://github.com/WoLpH/python-statsd) + +### Science and Data Analysis + +用来进行科学计算和数据分析的库。 + +* astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) +* [bcbio-nextgen](http://hao.jobbole.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) +* bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) +* Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) +* [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) +* [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) +* NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) +* Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) +* Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) +* [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) +* Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) +* [Open Mining](http://hao.jobbole.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) +* [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) +* Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) +* PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) +* [PyMC](http://hao.jobbole.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) +* RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) +* [SciPy](http://hao.jobbole.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) +* [statsmodels](http://hao.jobbole.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) +* SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) +* zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) +* [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) +* keras: 以tensorflow或者theano为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) + +### 数据可视化 + +进行数据可视化的库。 参见: [awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)。 + +* matplotlib:一个 Python 2D 绘图库。[官网](http://matplotlib.org/) +* bokeh:用 Python 进行交互式 web 绘图。[官网](https://github.com/bokeh/bokeh) +* ggplot:ggplot2 给 R 提供的 API 的 Python 版本。[官网](https://github.com/yhat/ggplot) +* plotly:协同 Python 和 matplotlib 工作的 web 绘图库。[官网](https://plot.ly/python/) +* pygal:一个 Python SVG 图表创建工具。[官网](http://www.pygal.org/en/latest/) +* pygraphviz:Graphviz 的 Python 接口。[官网](https://pypi.python.org/pypi/pygraphviz) +* PyQtGraph:交互式实时2D/3D/图像绘制及科学/工程学组件。[官网](http://www.pyqtgraph.org/) +* SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。[官网](http://jiffyclub.github.io/snakeviz/) +* vincent:把 Python 转换为 Vega 语法的转换工具。[官网](https://github.com/wrobstory/vincent) +* VisPy:基于 OpenGL 的高性能科学可视化工具。[官网](http://vispy.org/) + +### 计算机视觉 + +计算机视觉库。 + +* OpenCV:开源计算机视觉库。[官网](http://opencv.org/) +*   pyocr:Tesseract和Cuneiform的包装库。[官网](https://github.com/jflesch/pyocr) +*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr)的另一包装库。[官网](https://github.com/madmaze/pytesseract) +* [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) + +### 机器学习 + +机器学习库。 参见: [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python). + +* Crab:灵活、快速的推荐引擎。[官网](https://github.com/muricoca/crab) +* gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) +* hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) +* NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) +* pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) +* [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) +* [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) +* [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) +* scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) +* pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) +* vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) +* skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) + +### MapReduce + +MapReduce 框架和库。 + +* [dpark](http://hao.jobbole.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) +* dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。[官网](https://github.com/klbostee/dumbo) +* luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) +* mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) +* PySpark:Spark 的 Python API 。[官网](http://spark.apache.org/docs/latest/programming-guide.html) +* streamparse:运行针对事实数据流的 Python 代码。集成了[Apache Storm](http://storm.apache.org/)。[官网](https://github.com/Parsely/streamparse) + +### 函数式编程 + +使用 Python 进行函数式编程。 + +* CyToolz:Toolz 的 Cython 实现 : 高性能函数式工具。[官网](https://github.com/pytoolz/cytoolz/) +* fn.py:在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。[官网](https://github.com/kachayev/fn.py) +* funcy:炫酷又实用的函数式工具。[官网](https://github.com/Suor/funcy) +* Toolz:一组用于迭代器,函数和字典的函数式编程工具。[官网](https://github.com/pytoolz/toolz) + +### 第三方 API + +用来访问第三方 API的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 + +* apache-libcloud:一个为各种云设计的 Python 库。[官网](https://libcloud.apache.org/) +* boto:Amazon Web Services 的 Python 接口。[官网](https://github.com/boto/boto) +* django-wordpress:WordPress models and views for Django.[官网](https://github.com/sunlightlabs/django-wordpress/) +* facebook-sdk:Facebook 平台的 Python SDK.[官网](https://github.com/mobolic/facebook-sdk) +* facepy:Facepy 让和 Facebook's Graph API 的交互变得更容易。[官网](https://github.com/jgorset/facepy) +* gmail:Gmail 的 Python 接口。[官网](https://github.com/charlierguo/gmail) +* google-api-python-client:Python 用的 Google APIs 客户端库。[官网](https://github.com/google/google-api-python-client) +* gspread:Google 电子表格的 Python API.[官网](https://github.com/burnash/gspread) +* twython:Twitter API 的封装。[官网](https://github.com/ryanmcgrath/twython) + +### DevOps 工具 + +用于 DevOps 的软件和库。 + +* Ansible:一个非常简单的 IT 自动化平台。[官网](https://github.com/ansible/ansible) +* SaltStack:基础设施自动化和管理系统。[官网](https://github.com/saltstack/salt) +* OpenStack:用于构建私有和公有云的开源软件。[官网](http://www.openstack.org/) +* Docker Compose:快速,分离的开发环境,使用 Docker。[官网](https://docs.docker.com/compose/) +* Fabric:一个简单的,Python 风格的工具,用来进行远程执行和部署。[官网](http://www.fabfile.org/) +* cuisine:为 Fabric 提供一系列高级函数。[官网](https://github.com/sebastien/cuisine) +* Fabtools:一个用来编写超赞的 Fabric 文件的工具。[官网](https://github.com/ronnix/fabtools) +* gitapi:Git 的纯 Python API。[官网](https://bitbucket.org/haard/gitapi) +* hgapi:Mercurial 的纯 Python API。[官网](https://bitbucket.org/haard/hgapi) +* honcho:[Foreman](https://github.com/ddollar/foreman)的 Python 克隆版,用来管理基于[Procfile](https://devcenter.heroku.com/articles/procfile)的应用。[官网](https://github.com/nickstenning/honcho) +* pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。[官网](https://github.com/pexpect/pexpect) +* psutil:一个跨平台进程和系统工具模块。[官网](https://github.com/giampaolo/psutil) +* supervisor:UNIX 的进程控制系统。[官网](https://github.com/Supervisor/supervisor) + +### 任务调度 + +任务调度库。 + +* APScheduler:轻巧但强大的进程内任务调度,使你可以调度函数。[官网](http://apscheduler.readthedocs.org/en/latest/) +* django-schedule:一个 Django 排程应用。[官网](https://github.com/thauber/django-schedule) +* doit:一个任务执行和构建工具。[官网](http://pydoit.org/) +* gunnery:分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。[官网](https://github.com/gunnery/gunnery) +* Joblib:一组为 Python 提供轻量级作业流水线的工具。[官网](http://pythonhosted.org/joblib/index.html) +* Plan:如有神助地编写 crontab 文件。[官网](https://github.com/fengsp/plan) +* schedule:人性化的 Python 任务调度库。[官网](https://github.com/dbader/schedule) +* Spiff:使用纯 Python 实现的强大的工作流引擎。[官网](https://github.com/knipknap/SpiffWorkflow) +* TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。[官网](http://docs.openstack.org/developer/taskflow/) + +### 外来函数接口 + +使用外来函数接口的库。 + +* cffi:用来调用 C 代码的外来函数接口。[官网](https://pypi.python.org/pypi/cffi) +* [ctypes](http://hao.jobbole.com/ctypes/):(Python 标准库) 用来调用 C 代码的外来函数接口。[官网](https://docs.python.org/2/library/ctypes.html) +* PyCUDA:Nvidia CUDA API 的封装。[官网](https://mathema.tician.de/software/pycuda/) +* SWIG:简化的封装和接口生成器。[官网](http://www.swig.org/Doc1.3/Python.html) + +### 高性能 + +让 Python 更快的库。 + +* Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。[官网](http://cython.org/) +* PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。[官网](https://github.com/Maratyszcza/PeachPy) +* PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。[官网](http://pypy.org/) +* [Pyston](http://hao.jobbole.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) +* Stackless Python:一个强化版的 Python。[官网](https://bitbucket.org/stackless-dev/stackless/overview) + +### 微软的 Windows平台 + +在 Windows 平台上进行 Python 编程。 + +* Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。[官网](http://python-xy.github.io/) +* pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。[官网](http://www.lfd.uci.edu/~gohlke/pythonlibs/) +* PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。[官网](https://github.com/pythonnet/pythonnet) +* PyWin32:针对 Windows 的Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) +* WinPython:Windows 7/8 系统下便携式开发环境。[官网](https://winpython.github.io/) + +### 网络可视化和SDN + +用来进行网络可视化和SDN(软件定义网络)的工具和库。 + +* Mininet:一款流行的网络模拟器以及用 Python 编写的 API。[官网](http://mininet.org/) +* POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。[官网](https://github.com/noxrepo/pox) +* Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。[官网](http://frenetic-lang.org/pyretic/) +* SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。[官网](https://github.com/sdn-ixp/internet2award) + +### 硬件 + +用来对硬件进行编程的库。 + +* ino:操作[Arduino](https://www.arduino.cc/)的命令行工具。[官网](http://inotool.org/) +* Pyro:Python 机器人编程库。[官网](http://pyrorobotics.com/) +* PyUserInput:跨平台的,控制鼠标和键盘的模块。[官网](https://github.com/SavinaRoja/PyUserInput) +* scapy:一个非常棒的操作数据包的库。[官网](https://github.com/secdev/scapy) +* wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。[官网](https://wifi.readthedocs.org/en/latest/) +* Pingo:Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。[官网](http://www.pingo.io/) + +### 兼容性 + +帮助从 Python 2 向 Python 3迁移的库。 + +* Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。[官网](http://python-future.org/index.html) +* Python-Modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。[官网](https://github.com/mitsuhiko/python-modernize) +* Six:Python 2 和 3 的兼容性工具。[官网](https://pypi.python.org/pypi/six) + +### 杂项 + +不属于上面任何一个类别,但是非常有用的库。 + +* blinker:一个快速的 Python 进程内信号/事件分发系统。[官网](https://github.com/jek/blinker) +* itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) +* pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) +* Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) +* [Tryton](http://hao.jobbole.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) + +### 算法和设计模式 + +Python 实现的算法和设计模式。 + +* [algorithms](http://hao.jobbole.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) +* python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) +* sortedcontainers:快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) + +### 编辑器插件 + +编辑器和 IDE 的插件 + +* Emacs + * Elpy:Emacs Python 开发环境。[官网](https://github.com/jorgenschaefer/elpy) +* Sublime Text + * SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。[官网](https://github.com/srusskih/SublimeJEDI) + * Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。[官网](https://github.com/DamnWidget/anaconda) +* Vim + * [YouCompleteMe](http://hao.jobbole.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) + * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) + * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) +* Visual Studio + * PTVS:Visual Studio 的 Python 工具[官网](https://github.com/Microsoft/PTVS) + +### 集成开发环境 + +流行的 Python 集成开发环境。 + +* PyCharm:商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。[官网](https://www.jetbrains.com/pycharm/) +* LiClipse:基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。[官网](http://www.liclipse.com/) +* Spyder:开源 Python IDE。[官网](https://github.com/spyder-ide/spyder) + +### 自动聊天工具 + +用于开发聊天机器人的库 + +*   Errbot:最简单和最流行的聊天机器人用来实现自动聊天工具。[官网](http://errbot.io/en/latest/) + +## 服务 + +在线工具和简化开发的 API 。 + +### 持续集成 + +参见: [awesome-CIandCD](https://github.com/ciandcd/awesome-ciandcd#online-build-system). + +* Travis CI:一个流行的工具,为你的开源和[私人](https://travis-ci.com/)项目提供持续集成服务。(仅支持 GitHub)[官网](https://travis-ci.org/) +* CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)[官网](https://circleci.com/) +* Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。[官网](https://vexor.io/) +* Wercker:基于 Docker 平台,用来构建和部署微服务。[官网](http://wercker.com/) + +### 代码质量 + +* Codacy:自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。[官网](https://www.codacy.com/) +* QuantifiedCode:一个数据驱动、自动、持续的代码审查工具。[官网](https://www.quantifiedcode.com/) + +## 资源 + +在这里可以找到新的 Python 库。 + +### 网站 + +* [r/Python](https://www.reddit.com/r/python) +* [CoolGithubProjects](https://www.coolgithubprojects.com/) +* [Django Packages](https://www.djangopackages.com/) +* [Full Stack Python](http://www.fullstackpython.com/) +* [Python 3 Wall of Superpowers](http://python3wos.appspot.com/) +* [Python Hackers](http://pythonhackers.com/open-source/) +* [Python ZEEF](https://python.zeef.com/alan.richmond) +* [Trending Python repositories on GitHub today](https://github.com/trending?l=python) +* [PyPI Ranking](http://pypi-ranking.info/alltime) + +### 周刊 + +* [Import Python Newsletter](http://importpython.com/newsletter/) +* [Pycoder's Weekly](http://pycoders.com/) +* [Python Weekly](http://www.pythonweekly.com/) + +### Twitter + +* [@codetengu](https://twitter.com/codetengu) +* [@getpy](https://twitter.com/getpy) +* [@planetpython](https://twitter.com/planetpython) +* [@pycoders](https://twitter.com/pycoders) +* [@pypi](https://twitter.com/pypi) +* [@pythontrending](https://twitter.com/pythontrending) +* [@PythonWeekly](https://twitter.com/PythonWeekly) + +### 学习指南 +* [Scipy-lecture-notes](http://hao.jobbole.com/scipy-lecture-notes/):如何用Python来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) +* [SScientific-python-lectures](http://hao.jobbole.com/scientific-python-lectures/):Python科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) +* [Mario-Level-1](http://hao.jobbole.com/mario-level-1/):用Python和Pygame写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) +* [Python Koans](http://hao.jobbole.com/python-koans/):Python的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) +* [Minecraft](http://hao.jobbole.com/minecraft-python/):用python写的Minecraft游戏。[官网](https://github.com/fogleman/Minecraft) +* [pycrumbs](http://hao.jobbole.com/python-pycrumbs/):Python资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) +* [python-patterns](http://hao.jobbole.com/python-patterns/):使用python实现设计模式。[官网](https://github.com/faif/python-patterns) +* [Projects](http://hao.jobbole.com/python-projects/):Python项目大集合。[官网](https://github.com/karan/Projects) +* [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的Python学习指南。[官网](http://docs.python-guide.org/en/latest/) +* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像Python高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html) + +

知名网站

+*值得关注的 Python 技术站点。* + +

中文站点

+ +* 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。[官网](http://python.jobbole.com/) + +

英文站点

+ +* 《[值得关注的 10 个 Python 英文博客](http://python.jobbole.com/81730/)》 + +

微博、微信公众号

+* Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) +* Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享Python技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。 +
From 1b4b5f786eda25f6399839d8d44b280bf57d66de Mon Sep 17 00:00:00 2001 From: ZivLi Date: Fri, 2 Jun 2017 17:37:53 +0800 Subject: [PATCH 051/143] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E5=B7=A5=E5=85=B7YAPF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4fa965d..cecd303 100644 --- a/README.md +++ b/README.md @@ -864,6 +864,7 @@ Python实现的数据库。 * Lint工具 * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) + * YAPF: Google的Python代码格式化工具。[官网](https://github.com/google/yapf) * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) * 代码格式化 * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) From 2703d406b45c998fa46dcb506fd309c40db0e90b Mon Sep 17 00:00:00 2001 From: "jinghua.yao" Date: Tue, 20 Jun 2017 14:33:35 +0800 Subject: [PATCH 052/143] add caffe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cecd303..b2010da 100644 --- a/README.md +++ b/README.md @@ -958,7 +958,7 @@ Python实现的数据库。 * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) - +* Caffe: 一个[Caffe](https://github.com/BVLC/caffe)的python接口。[官网](http://caffe.berkeleyvision.org) ### MapReduce MapReduce 框架和库。 From 12f111f195d5ddc8c9b3b5d948b27bf79ad4132f Mon Sep 17 00:00:00 2001 From: q Date: Fri, 21 Jul 2017 13:59:22 +0800 Subject: [PATCH 053/143] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=8B=BC=E5=86=99?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Markdiwn2 -> Markdown2 修复不正确空白字符导致的展示结果不符预期 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b2010da..e6c51ae 100644 --- a/README.md +++ b/README.md @@ -196,7 +196,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Markdown * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) - * Python-Markdiwn2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) + * Python-Markdown2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) * YAML * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) * CSV @@ -265,7 +265,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) -    *   try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) + * try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) ### 下载器 From 12bfed0811574959c5d436666d80f1b67497f7d0 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Fri, 3 Nov 2017 09:06:14 +0800 Subject: [PATCH 054/143] update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e6c51ae..884b400 100644 --- a/README.md +++ b/README.md @@ -916,7 +916,7 @@ Python实现的数据库。 * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) -* keras: 以tensorflow或者theano为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) +* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) ### 数据可视化 @@ -926,9 +926,10 @@ Python实现的数据库。 * bokeh:用 Python 进行交互式 web 绘图。[官网](https://github.com/bokeh/bokeh) * ggplot:ggplot2 给 R 提供的 API 的 Python 版本。[官网](https://github.com/yhat/ggplot) * plotly:协同 Python 和 matplotlib 工作的 web 绘图库。[官网](https://plot.ly/python/) +* pyecharts:基于百度 Echarts 的数据可视化库。[官网](https://github.com/chenjiandongx/pyecharts) * pygal:一个 Python SVG 图表创建工具。[官网](http://www.pygal.org/en/latest/) * pygraphviz:Graphviz 的 Python 接口。[官网](https://pypi.python.org/pypi/pygraphviz) -* PyQtGraph:交互式实时2D/3D/图像绘制及科学/工程学组件。[官网](http://www.pyqtgraph.org/) +* PyQtGraph:交互式实时 2D/3D/ 图像绘制及科学/工程学组件。[官网](http://www.pyqtgraph.org/) * SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。[官网](http://jiffyclub.github.io/snakeviz/) * vincent:把 Python 转换为 Vega 语法的转换工具。[官网](https://github.com/wrobstory/vincent) * VisPy:基于 OpenGL 的高性能科学可视化工具。[官网](http://vispy.org/) @@ -938,8 +939,8 @@ Python实现的数据库。 计算机视觉库。 * OpenCV:开源计算机视觉库。[官网](http://opencv.org/) -*   pyocr:Tesseract和Cuneiform的包装库。[官网](https://github.com/jflesch/pyocr) -*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr)的另一包装库。[官网](https://github.com/madmaze/pytesseract) +*   pyocr:Tesseract 和 Cuneiform 的包装库。[官网](https://github.com/jflesch/pyocr) +*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。[官网](https://github.com/madmaze/pytesseract) * [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) ### 机器学习 @@ -958,7 +959,7 @@ Python实现的数据库。 * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) -* Caffe: 一个[Caffe](https://github.com/BVLC/caffe)的python接口。[官网](http://caffe.berkeleyvision.org) +* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的python接口。[官网](http://caffe.berkeleyvision.org) ### MapReduce MapReduce 框架和库。 From 9505c6f3f0d59447a98cfb5b25c5b2755fe93739 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 23 Nov 2017 13:30:02 +0800 Subject: [PATCH 055/143] =?UTF-8?q?add=20face=5Frecognition,=20Codecov=20a?= =?UTF-8?q?nd=20contributor=20=E9=99=88=E9=94=AE=E5=86=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 884b400..3fa44af 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[陈键冬](https://github.com/chenjiandongx) 注:名单不分排名,不定期补充更新 @@ -291,6 +291,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * scikit-image:一个用于(科学)图像处理的 Python 库。[官网](http://scikit-image.org/) * thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。[官网](https://github.com/thumbor/thumbor) * wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的Python 绑定。MagickWand 是 ImageMagick的 C API 。[官网](https://github.com/dahlia/wand) +* face_recognition:简单易用的 python 人脸识别库。[官网](https://github.com/ageitgey/face_recognition) ### OCR @@ -845,6 +846,7 @@ Python实现的数据库。 * modelmommy:为 Django 测试创建随机固件[官网](https://github.com/vandersonmota/modelmommy) * 代码覆盖率 * coverage:代码覆盖率测量。[官网](https://pypi.python.org/pypi/coverage) + * Codecov:一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。[官网](https://codecov.io/) * 伪数据 * faker:一个 Python 库,用来生成伪数据。[官网](http://www.joke2k.net/faker/) * fake2db:伪数据库生成器。[官网](https://github.com/emirozer/fake2db) From 8bdbcd2390dc49c613b1773ee143b143700889bb Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 6 Dec 2017 00:13:25 +0800 Subject: [PATCH 056/143] add tushare --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3fa44af..5aaff83 100644 --- a/README.md +++ b/README.md @@ -1137,6 +1137,10 @@ Python 实现的算法和设计模式。 在线工具和简化开发的 API 。 +###金融数据 + +* Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的Python开源数据。[官网](http://tushare.org) + ### 持续集成 参见: [awesome-CIandCD](https://github.com/ciandcd/awesome-ciandcd#online-build-system). From f61c0a565a3a24d6040a0b120e2ca15f726566b9 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Wed, 6 Dec 2017 00:16:37 +0800 Subject: [PATCH 057/143] update tushare. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5aaff83..f26ee0c 100644 --- a/README.md +++ b/README.md @@ -1137,7 +1137,7 @@ Python 实现的算法和设计模式。 在线工具和简化开发的 API 。 -###金融数据 +### 金融数据 * Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的Python开源数据。[官网](http://tushare.org) From fcd5ebecce0cc0f8689bcbcc02b583302dd00757 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Wed, 13 Dec 2017 14:23:54 +0800 Subject: [PATCH 058/143] README.md update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3fa44af..46c50a7 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) * pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) * Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) +* readthedocs:一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。[官网](https://github.com/rtfd/readthedocs.org/) ### 配置 From 181b7aedc9279f0d05ae2aaa0518906e8bf3f822 Mon Sep 17 00:00:00 2001 From: Yan QiDong Date: Tue, 19 Dec 2017 16:51:48 +0800 Subject: [PATCH 059/143] Fix a description error about Warehouse. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3fa44af..733b4fd 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,8 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 本地 PyPI 仓库服务和代理。 * warehouse:下一代 PyPI。[官网](https://github.com/pypa/warehouse) - * Warehouse:PyPA 提供的 PyPI 镜像工具。[官网](https://warehouse.python.org/) [bandersnatch](https://bitbucket.org/pypa/bandersnatch) + * Warehouse:[预览](https://pypi.org/) +* bandersnatch:PyPA 提供的 PyPI 镜像工具。[官网](https://bitbucket.org/pypa/bandersnatch) * devpi:PyPI 服务和打包/测试/分发工具。[官网](http://doc.devpi.net/) * localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。[官网](https://github.com/mvantellingen/localshop) From 1a802b9240e3523798a557cec9b1640a0a7e6bde Mon Sep 17 00:00:00 2001 From: kevinskywalker Date: Thu, 28 Dec 2017 20:57:46 -0600 Subject: [PATCH 060/143] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 11e016c..34992f3 100644 --- a/README.md +++ b/README.md @@ -1142,6 +1142,7 @@ Python 实现的算法和设计模式。 ### 金融数据 * Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的Python开源数据。[官网](http://tushare.org) +* Ta-Lib :金融数据技术分析库,可以依据原始金融数据计算各种技术指标,计算性能比较优异。[官网](https://www.ta-lib.org/) ### 持续集成 From f2365f05c3173128e5f94d1945c0a2f6d4bd06f6 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sat, 6 Jan 2018 21:59:56 +0800 Subject: [PATCH 061/143] add pendulum,python-fire,Caffe2 library --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 34992f3..8fdde88 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) * delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) * moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。[官网](https://github.com/zachwill/moment) +* pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。[官网](https://github.com/sdispater/pendulum) * PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) * pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。[官网](https://launchpad.net/pytz) * when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) @@ -222,7 +223,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用以生成项目文档的库。 * [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) - * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) +* awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) * MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) * pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) * Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) @@ -252,6 +253,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * docopt:Python 风格的命令行参数解析器。[官网](http://docopt.org/) * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) + * python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。[官网](https://github.com/google/python-fire) * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](https://github.com/Russell91/pythonpy/wiki) * 生产力工具 * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) @@ -964,6 +966,8 @@ Python实现的数据库。 * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) * Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的python接口。[官网](http://caffe.berkeleyvision.org) +* [Caffe2](https://github.com/caffe2/caffe2/):一个轻量级的,模块化的,可扩展的深度学习框架。[官网](https://caffe2.ai/) + ### MapReduce MapReduce 框架和库。 From 41fa01257b8bea4807df9c731093cc8d82da2dc6 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Mon, 8 Jan 2018 11:32:14 +0800 Subject: [PATCH 062/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20pipenv=20=E5=92=8C?= =?UTF-8?q?=20pyftpdlib=20=E4=B8=A4=E4=B8=AA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8fdde88..ed9381a 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) * pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) +* pipenv:Pyhton 官方推荐的新一代包管理工具。[官网](https://github.com/pypa/pipenv) * conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) * Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) * wheel:Python 分发的新标准,意在取代 eggs。[官网](http://pythonwheels.com/) @@ -261,6 +262,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。[官网](https://github.com/brettcannon/caniusepython3) * cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。[官网](https://github.com/audreyr/cookiecutter) * doitlive:一个用来在终端中进行现场演示的工具。[官网](https://github.com/sloria/doitlive) + * pyftpdlib:一个速度极快和可扩展的 Python FTP 服务库。[官网](https://github.com/giampaolo/pyftpdlib) * howdoi:通过命令行获取即时的编程问题解答。[官网](https://github.com/gleitz/howdoi) * httpie:一个命令行HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) * PathPicker:从bash输出中选出文件。[官网](https://github.com/facebook/PathPicker) From 030ea15ea898763b869e93446cd2a24adf60eac5 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Tue, 9 Jan 2018 11:54:37 +0800 Subject: [PATCH 063/143] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=95=B4=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E7=A1=AE=E4=BF=9D=E4=B8=AD+=E8=8B=B1=EF=BC=8C?= =?UTF-8?q?=E4=B8=AD+=E6=95=B0=E5=AD=97=E7=9A=84=E4=B8=A4=E8=BE=B9?= =?UTF-8?q?=E5=9D=87=E6=9C=89=E4=B8=80=E4=B8=AA=E7=A9=BA=E6=A0=BC=E9=9A=94?= =?UTF-8?q?=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 226 +++++++++++++++++++++++++++--------------------------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/README.md b/README.md index ed9381a..9a7bd07 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python 资源大全中文版 -我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。 +我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。 Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 @@ -10,8 +10,8 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 - 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 - 整理后的内容,将收录在[伯乐在线资源频道](http://hao.jobbole.com/)。可参考已整理的内容: - - 《[Scrapy:Python的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 - - 《[Flask:一个使用Python编写的轻量级Web应用框架](http://hao.jobbole.com/flask/)》 + - 《[Scrapy:Python 的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 + - 《[Flask:一个使用 Python 编写的轻量级 Web 应用框架](http://hao.jobbole.com/flask/)》 * * * @@ -30,12 +30,12 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 如何为列表贡献新资源? -欢迎大家为列表贡献高质量的新资源,提交PR时请参照以下要求: +欢迎大家为列表贡献高质量的新资源,提交 PR 时请参照以下要求: * 请确保推荐的资源自己使用过 -* 提交PR时请注明推荐理由 +* 提交 PR 时请注明推荐理由 -资源列表管理收到PR请求后,会定期(每周)在微博转发本周提交的PR列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 +资源列表管理收到 PR 请求后,会定期(每周)在微博转发本周提交的 PR 列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 感谢您的贡献! @@ -100,7 +100,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。[官网](http://nuitka.net/) * py2app:将 Python 脚本变为独立软件包(Mac OS X)。[官网](http://pythonhosted.org/py2app/) * py2exe:将 Python 脚本变为独立软件包(Windows)。[官网](http://www.py2exe.org/) -* pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。[官网](http://pynsist.readthedocs.org/) +* pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。[官网](http://pynsist.readthedocs.org/) ### 构建工具 @@ -119,7 +119,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) * [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) -* ptpython:高级交互式Python解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) +* ptpython:高级交互式 Python 解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) ### 文件 @@ -141,10 +141,10 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) * dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) * delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) -* moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。[官网](https://github.com/zachwill/moment) +* moment:一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。[官网](https://github.com/zachwill/moment) * pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。[官网](https://github.com/sdispater/pendulum) -* PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) -* pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。[官网](https://launchpad.net/pytz) +* PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) +* pytz:现代以及历史版本的世界时区定义。将时区数据库引入 Python。[官网](https://launchpad.net/pytz) * when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) ### 文本处理 @@ -154,17 +154,17 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * 通用 * [chardet](http://hao.jobbole.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) - * ftfy:让Unicode文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) + * ftfy:让 Unicode 文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) * Levenshtein:快速计算编辑距离以及字符串的相似度。[官网](https://github.com/ztane/python-Levenshtein/) * pangu.py:在中日韩语字符和数字字母之间添加空格。[官网](https://github.com/vinta/pangu.py) - * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python实现。 + * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python 实现。 * shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。[官网](https://github.com/stochastic-technologies/shortuuid) * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * simplejson:Python的JSON编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) -* Slug化 + * simplejson:Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) +* Slug 化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) * unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。[官网](https://github.com/mozilla/unicode-slugify) @@ -184,16 +184,16 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * 通用 * tablib:一个用来处理中表格数据的模块。[官网](https://github.com/kennethreitz/tablib) * Office - * Marmir:把输入的Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) + * Marmir:把输入的 Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) * openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。[官网](https://openpyxl.readthedocs.org/en/latest/) * python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。[官网](https://github.com/python-openxml/python-docx) * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) - * relatorio:模板化OpenDocument 文件。[官网](http://relatorio.tryton.org/) + * relatorio:模板化 OpenDocument 文件。[官网](http://relatorio.tryton.org/) * PDF - * PDFMiner:一个用于从PDF文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) + * PDFMiner:一个用于从 PDF 文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) * ReportLab:快速创建富文本 PDF 文档。[官网](http://www.reportlab.com/opensource/) * Markdown @@ -226,7 +226,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) * MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) -* pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) +* pdoc:一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) * Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) * readthedocs:一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。[官网](https://github.com/rtfd/readthedocs.org/) @@ -245,7 +245,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用于创建命令行程序的库。 * 命令行程序开发 - * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级API。[官网](https://github.com/peterbrittain/asciimatics) + * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级 API。[官网](https://github.com/peterbrittain/asciimatics) * cement:Python 的命令行程序框架。[官网](http://builtoncement.com/) * click:一个通过组合的方式来创建精美命令行界面的包。[官网](http://click.pocoo.org/dev/) * cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。[官网](http://docs.openstack.org/developer/cliff/) @@ -255,29 +255,29 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) * python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。[官网](https://github.com/google/python-fire) - * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何Python指令。[官网](https://github.com/Russell91/pythonpy/wiki) + * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何 Python 指令。[官网](https://github.com/Russell91/pythonpy/wiki) * 生产力工具 * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) - * caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。[官网](https://github.com/brettcannon/caniusepython3) + * caniusepython3:判断是哪个项目妨碍你你移植到 Python3。[官网](https://github.com/brettcannon/caniusepython3) * cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。[官网](https://github.com/audreyr/cookiecutter) * doitlive:一个用来在终端中进行现场演示的工具。[官网](https://github.com/sloria/doitlive) * pyftpdlib:一个速度极快和可扩展的 Python FTP 服务库。[官网](https://github.com/giampaolo/pyftpdlib) * howdoi:通过命令行获取即时的编程问题解答。[官网](https://github.com/gleitz/howdoi) - * httpie:一个命令行HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) - * PathPicker:从bash输出中选出文件。[官网](https://github.com/facebook/PathPicker) - * percol:向UNIX shell 传统管道概念中加入交互式选择功能。[官网](https://github.com/mooz/percol) + * httpie:一个命令行 HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) + * PathPicker:从 bash 输出中选出文件。[官网](https://github.com/facebook/PathPicker) + * percol:向 UNIX shell 传统管道概念中加入交互式选择功能。[官网](https://github.com/mooz/percol) * SAWS:一个加强版的 AWS 命令行。[官网](https://github.com/donnemartin/saws) * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) - * try:一个从来没有更简单的命令行工具,用来试用python库。[官网](https://github.com/timofurrer/try) + * try:一个从来没有更简单的命令行工具,用来试用 python 库。[官网](https://github.com/timofurrer/try) ### 下载器 用来进行下载的库. -* s3cmd:一个用来管理Amazon S3 和 CloudFront 的命令行工具。[官网](https://github.com/s3tools/s3cmd) +* s3cmd:一个用来管理 Amazon S3 和 CloudFront 的命令行工具。[官网](https://github.com/s3tools/s3cmd) * s4cmd:超级 S3 命令行工具,性能更加强劲。[官网](https://github.com/bloomreach/s4cmd) * you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。[官网](https://www.soimort.org/you-get/) * youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。[官网](http://rg3.github.io/youtube-dl/) @@ -296,7 +296,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Quads:基于四叉树的计算机艺术。[官网](https://github.com/fogleman/Quads) * scikit-image:一个用于(科学)图像处理的 Python 库。[官网](http://scikit-image.org/) * thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。[官网](https://github.com/thumbor/thumbor) -* wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的Python 绑定。MagickWand 是 ImageMagick的 C API 。[官网](https://github.com/dahlia/wand) +* wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。[官网](https://github.com/dahlia/wand) * face_recognition:简单易用的 python 人脸识别库。[官网](https://github.com/ageitgey/face_recognition) ### OCR @@ -324,12 +324,12 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端[官网](https://github.com/echonest/pyechonest) * talkbox:一个用来处理演讲/信号的 Python 库[官网](http://scikits.appspot.com/talkbox) * TimeSide:开源 web 音频处理框架。[官网](https://github.com/Parisson/TimeSide) -* tinytag:一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) +* tinytag:一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) * mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。[官网](http://bspaans.github.io/python-mingus/) ### Video -用来操作视频和GIF的库。 +用来操作视频和 GIF 的库。 * moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。[官网](http://zulko.github.io/moviepy/) * scikit-video:SciPy 视频处理常用程序。[官网](https://github.com/aizvorski/scikit-video) @@ -347,17 +347,17 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### HTTP -使用HTTP的库。 +使用 HTTP 的库。 -* requests:人性化的HTTP请求库。[官网](http://docs.python-requests.org/en/latest/) +* requests:人性化的 HTTP 请求库。[官网](http://docs.python-requests.org/en/latest/) * grequests:requests 库 + gevent ,用于异步 HTTP 请求.[官网](https://github.com/kennethreitz/grequests) * httplib2:全面的 HTTP 客户端库。[官网](https://github.com/jcgregorio/httplib2) -* treq:类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。[官网](https://github.com/twisted/treq) +* treq:类似 requests 的 Python API 构建于 Twisted HTTP 客户端之上。[官网](https://github.com/twisted/treq) * urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。[官网](https://github.com/shazow/urllib3) ### 数据库 -Python实现的数据库。 +Python 实现的数据库。 * pickleDB:一个简单,轻量级键值储存数据库。[官网](https://pythonhosted.org/pickleDB/) * PipelineDB:流式 SQL 数据库。[官网](https://www.pipelinedb.com/) @@ -378,14 +378,14 @@ Python实现的数据库。 * queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。[官网](https://github.com/gmr/queries) * txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。[官网](http://txpostgres.readthedocs.org/en/latest/) * 其他关系型数据库 - * apsw:另一个 Python SQLite封装。[官网](http://rogerbinns.github.io/apsw/) - * dataset:在数据库中存储Python字典 - * pymssql:一个简单的Microsoft SQL Server数据库接口。[官网](http://www.pymssql.org/en/latest/) + * apsw:另一个 Python SQLite 封装。[官网](http://rogerbinns.github.io/apsw/) + * dataset:在数据库中存储 Python 字典 + * pymssql:一个简单的 Microsoft SQL Server 数据库接口。[官网](http://www.pymssql.org/en/latest/) * NoSQL 数据库 * cassandra-python-driver:Cassandra 的 Python 驱动。[官网](https://github.com/datastax/python-driver) * HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。[官网](http://happybase.readthedocs.org/en/latest/) * Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。[官网](https://plyvel.readthedocs.org/en/latest/) - * py2neo:Neo4j restful 接口的Python 封装客户端。[官网](http://py2neo.org/2.0/) + * py2neo:Neo4j restful 接口的 Python 封装客户端。[官网](http://py2neo.org/2.0/) * pycassa:Cassandra 的 Python Thrift 驱动。[官网](https://github.com/pycassa/pycassa) * PyMongo:MongoDB 的官方 Python 客户端。[官网](https://docs.mongodb.org/ecosystem/drivers/python/) * redis-py:Redis 的 Python 客户端。[官网](https://github.com/andymccurdy/redis-py) @@ -407,7 +407,7 @@ Python实现的数据库。 * django-mongodb-engine:Django MongoDB 后端。[官网](https://github.com/django-nonrel/mongodb-engine) * PynamoDB:[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。[官网](https://github.com/jlafon/PynamoDB) * flywheel:Amazon DynamoDB 的对象映射工具。[官网](https://github.com/mathcamp/flywheel) - * MongoEngine:一个Python 对象文档映射工具,用于 MongoDB。[官网](http://mongoengine.org/) + * MongoEngine:一个 Python 对象文档映射工具,用于 MongoDB。[官网](http://mongoengine.org/) * hot-redis:为 Redis 提供 Python 丰富的数据类型。[官网](https://github.com/stephenmcd/hot-redis) * redisco:一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。[官网](https://github.com/kiddouk/redisco) * 其他 @@ -421,14 +421,14 @@ Python实现的数据库。 * [awesome-django](https://gitlab.com/rosarior/awesome-django)系列 * [Flask](http://hao.jobbole.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) * [awesome-flask](https://github.com/humiaozuzu/awesome-flask)系列 -* pyramid:一个小巧,快速,接地气的开源Python web 框架。 +* pyramid:一个小巧,快速,接地气的开源 Python web 框架。 * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid)系列 * [Bottle](http://hao.jobbole.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) -* CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。[官网](http://www.cherrypy.org/) +* CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。[官网](http://www.cherrypy.org/) * TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) * [web.py](http://hao.jobbole.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) * web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) -* [Tornado](http://hao.jobbole.com/tornado/):一个web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) +* [Tornado](http://hao.jobbole.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) ### 权限 @@ -442,7 +442,7 @@ Python实现的数据库。 内容管理系统 -* odoo-cms: 一个开源的,企业级 CMS,基于odoo。[官网](http://www.odoo.com) +* odoo-cms: 一个开源的,企业级 CMS,基于 odoo。[官网](http://www.odoo.com) * django-cms:一个开源的,企业级 CMS,基于 Django。[官网](http://www.django-cms.org/en/) * djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。[官网](http://djedi-cms.org/) * FeinCMS:基于 Django 构建的最先进的内容管理系统之一。[官网](http://www.feincms.org/) @@ -464,25 +464,25 @@ Python实现的数据库。 * shoop:一个基于 Django 的开源电子商务平台。[官网](https://www.shoop.io/en/) * alipay:非官方的 Python 支付宝 API。[官网](https://github.com/lxneng/alipay) * merchant:一个可以接收来自多种支付平台支付的 Django 应用。[官网](https://github.com/agiliq/merchant) -* money:货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.[官网](https://github.com/carlospalol/money) +* money:货币类库 with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.[官网](https://github.com/carlospalol/money) * python-currencies:显示货币格式以及它的数值。[官网](https://github.com/Alir3z4/python-currencies) ### RESTful API -用来开发RESTful APIs的库 +用来开发 RESTful APIs 的库 * Django * [django-rest-framework](http://hao.jobbole.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) - * django-tastypie:为Django 应用开发API。[官网](http://tastypieapi.org/) + * django-tastypie:为 Django 应用开发 API。[官网](http://tastypieapi.org/) * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) * Flask * flask-api:为 flask 开发的,可浏览 Web APIs 。[官网](http://www.flaskapi.org/) - * flask-restful:为 flask 快速创建REST APIs 。[官网](http://flask-restful.readthedocs.org/en/latest/) + * flask-restful:为 flask 快速创建 REST APIs 。[官网](http://flask-restful.readthedocs.org/en/latest/) * flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。[官网](https://flask-restless.readthedocs.org/en/latest/) * flask-api-utils:为 Flask 处理 API 表示和验证。[官网](https://github.com/marselester/flask-api-utils) * eve:REST API 框架,由 Flask, MongoDB 等驱动。[官网](https://github.com/nicolaiarocci/eve) * Pyramid - * cornice:一个Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) + * cornice:一个 Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) * 与框架无关的 * falcon:一个用来建立云 API 和 web app 后端的高性能框架。[官网](http://falconframework.org/) * sandman:为现存的数据库驱动系统自动创建 REST APIs 。[官网](https://github.com/jeffknupp/sandman) @@ -503,7 +503,7 @@ Python实现的数据库。 * python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。[官网](https://github.com/joestump/python-oauth2) * python-social-auth:一个设置简单的社会化验证方式。[官网](https://github.com/omab/python-social-auth) * rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。[官网](https://github.com/litl/rauth) - * sanction:一个超级简单的OAuth2 客户端实现。[官网](https://github.com/demianbrecht/sanction) + * sanction:一个超级简单的 OAuth2 客户端实现。[官网](https://github.com/demianbrecht/sanction) * 其他 * jose:JavaScript 对象签名和加密草案的实现。[官网](https://github.com/demonware/jose) * PyJWT:JSON Web 令牌草案 01。[官网](https://github.com/jpadilla/pyjwt) @@ -562,13 +562,13 @@ Python实现的数据库。 缓存数据的库。 -* Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。[官网](http://beaker.readthedocs.org/en/latest/) +* Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python 脚本和应用上。[官网](http://beaker.readthedocs.org/en/latest/) * django-cache-machine:Django 模型的自动缓存和失效。[官网](https://github.com/django-cache-machine/django-cache-machine) * django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。[官网](https://github.com/Suor/django-cacheops) * django-viewlet:渲染模板,同时具有额外的缓存控制功能。[官网](https://github.com/5monkeys/django-viewlet) * dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。[官网](http://dogpilecache.readthedocs.org/en/latest/) * HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。[官网](https://pypi.python.org/pypi/HermesCache) -* johnny-cache:django应用缓存框架。[官网](https://github.com/jmoiron/johnny-cache) +* johnny-cache:django 应用缓存框架。[官网](https://github.com/jmoiron/johnny-cache) * pylibmc:[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。[官网](https://github.com/lericson/pylibmc) ### 电子邮件 @@ -592,31 +592,31 @@ Python实现的数据库。 用来进行国际化的库。 -* Babel:一个Python 的国际化库。[官网](http://babel.pocoo.org/en/latest/) +* Babel:一个 Python 的国际化库。[官网](http://babel.pocoo.org/en/latest/) * Korean:一个韩语词态库。[官网](https://korean.readthedocs.org/en/latest/) -### URL处理 +### URL 处理 -解析URLs的库 +解析 URLs 的库 * furl:一个让处理 URL 更简单小型 Python 库。[官网](https://github.com/gruns/furl) -* purl:一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。[官网](https://github.com/codeinthehole/purl) +* purl:一个简单的,不可变的 URL 类,具有简洁的 API 来进行询问和处理。[官网](https://github.com/codeinthehole/purl) * pyshorteners:一个纯 Python URL 缩短库。[官网](https://github.com/ellisonleao/pyshorteners) -* shorturl:生成短小 URL 和类似 bit.ly 短链的Python 实现。[官网](https://github.com/Alir3z4/python-shorturl) -* webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。[官网](https://github.com/sloria/webargs) +* shorturl:生成短小 URL 和类似 bit.ly 短链的 Python 实现。[官网](https://github.com/Alir3z4/python-shorturl) +* webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado 和 Pyramid。[官网](https://github.com/sloria/webargs) -### HTML处理 +### HTML 处理 -处理 HTML和XML的库。 +处理 HTML 和 XML 的库。 * BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。[官网](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) * bleach:一个基于白名单的 HTML 清理和文本链接库。[官网](http://bleach.readthedocs.org/en/latest/) * cssutils:一个 Python 的 CSS 库。[官网](https://pypi.python.org/pypi/cssutils/) * html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。[官网](https://github.com/html5lib/html5lib-python) * lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) -* MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) +* MarkupSafe:为 Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) * pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) -* untangle:将XML文档转换为Python对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) +* untangle:将 XML 文档转换为 Python 对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) * xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) * xmltodict:像处理 JSON 一样处理 XML。[官网](https://github.com/martinblech/xmltodict) @@ -624,7 +624,7 @@ Python实现的数据库。 * Scrapy:一个快速高级的屏幕爬取及网页采集框架。[官网](http://scrapy.org/) * cola:一个分布式爬虫框架。[官网](https://github.com/chineking/cola) -* Demiurge:基于PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) +* Demiurge:基于 PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) * feedparser:通用 feed 解析器。[官网](http://pythonhosted.org/feedparser/) * Grab:站点爬取框架。[官网](http://grablib.org/) * MechanicalSoup:用于自动和网络站点交互的 Python 库。[官网](https://github.com/hickford/MechanicalSoup) @@ -641,8 +641,8 @@ Python实现的数据库。 * lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) * micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) * [newspaper](http://hao.jobbole.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) -* opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。[官网](https://github.com/erikriver/opengraph) -* [python-goose](http://hao.jobbole.com/python-goose/):HTML内容/文章提取器。[官网](https://github.com/grangier/python-goose) +* opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。[官网](https://github.com/erikriver/opengraph) +* [python-goose](http://hao.jobbole.com/python-goose/):HTML 内容/文章提取器。[官网](https://github.com/grangier/python-goose) * python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) * sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) * sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) @@ -669,14 +669,14 @@ Python实现的数据库。 * schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) * Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) * valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) -* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) +* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) ### 反垃圾技术 帮助你和电子垃圾进行战斗的库。 -* django-simple-captcha:一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。[官网](https://github.com/mbi/django-simple-captcha) -* django-simple-spam-blocker:一个用于Django的简单的电子垃圾屏蔽工具。[官网](https://github.com/moqada/django-simple-spam-blocker) +* django-simple-captcha:一个简单、高度可定制的 Django 应用,可以为任何 Django 表单添加验证码。[官网](https://github.com/mbi/django-simple-captcha) +* django-simple-spam-blocker:一个用于 Django 的简单的电子垃圾屏蔽工具。[官网](https://github.com/moqada/django-simple-spam-blocker) ### 标记 @@ -698,13 +698,13 @@ Python实现的数据库。 ### 静态站点生成器 -静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。 +静态站点生成器是一个软件,它把文本和模板作为输入,然后输出 HTML 文件。 * Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。[官网](http://blog.getpelican.com/) * Cactus:为设计师设计的静态站点生成器。[官网](https://github.com/koenbok/Cactus/) * Hyde:基于 Jinja2 的静态站点生成器。[官网](http://hyde.github.io/) * Nikola:一个静态网站和博客生成器。[官网](https://www.getnikola.com/) -* Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。[官网](http://tinkerer.me/) +* Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。[官网](http://tinkerer.me/) * Lektor:一个简单易用的静态 CMS 和博客引擎。[官网](https://www.getlektor.com/) ### 进程 @@ -724,7 +724,7 @@ Python实现的数据库。 * eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) * gevent:一个基于协程的 Python 网络库,使用[greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) * Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) -* uvloop:在libuv之上超快速实现asyncio事件循环。[官网](https://github.com/MagicStack/uvloop) +* uvloop:在 libuv 之上超快速实现 asyncio 事件循环。[官网](https://github.com/MagicStack/uvloop) ### 网络 @@ -733,18 +733,18 @@ Python实现的数据库。 * asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) * [Twisted](http://hao.jobbole.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) * pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) -* diesel:基于Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) +* diesel:基于 Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) * pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) * txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。[官网](https://github.com/smira/txZMQ) ### WebSocket -帮助使用WebSocket的库。 +帮助使用 WebSocket 的库。 * AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。[官网](https://github.com/crossbario/autobahn-python) * Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn).[官网](https://github.com/crossbario/crossbar/) * django-socketio:给 Django 用的 WebSockets。[官网](https://github.com/stephenmcd/django-socketio) -* WebSocket-for-Python:为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) +* WebSocket-for-Python:为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) ### WSGI 服务器 @@ -783,11 +783,11 @@ Python实现的数据库。 用来创建图形用户界面程序的库。 * curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) -* enaml:使用类似 QML 的Declaratic语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) -* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。[官网](https://kivy.org/) -* pyglet:一个Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) -* PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) -* PySide:P跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持Qt v4。[官网](https://wiki.qt.io/PySide) +* enaml:使用类似 QML 的 Declaratic 语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) +* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。[官网](https://kivy.org/) +* pyglet:一个 Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) +* PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) +* PySide:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。[官网](https://wiki.qt.io/PySide) * Tkinter:Tkinter 是 Python GUI 的一个事实标准库。[官网](https://wiki.python.org/moin/TkInter) * Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。[官网](https://github.com/pybee/toga) * urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。[官网](http://urwid.org/) @@ -800,7 +800,7 @@ Python实现的数据库。 超赞的游戏开发库。 * Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。[官网](http://cocos2d.org/) -* Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。[官网](https://www.panda3d.org/) +* Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用 C++ 编写, 针对 Python 进行了完全的封装。[官网](https://www.panda3d.org/) * Pygame:Pygame 是一组 Python 模块,用来编写游戏。[官网](http://www.pygame.org/news.html) * PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。[官网](http://www.ogre3d.org/tikiwiki/PyOgre) * PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。[官网](http://pyopengl.sourceforge.net/) @@ -814,7 +814,7 @@ Python实现的数据库。 * logging:(Python 标准库) 为 Python 提供日志功能。[官网](https://docs.python.org/2/library/logging.html) * logbook:Logging 库的替代品。[官网](http://pythonhosted.org/Logbook/) * Eliot:为复杂的和分布式系统创建日志。[官网](https://eliot.readthedocs.org/en/latest/) -* Raven:Sentry的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) +* Raven:Sentry 的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) * Sentry:实时记录和收集日志的服务器。[官网](https://pypi.python.org/pypi/sentry) ### Testing @@ -824,21 +824,21 @@ Python实现的数据库。 * 测试框架 * unittest:(Python 标准库) 单元测试框架。[官网](https://docs.python.org/2/library/unittest.html) * nose:nose 扩展了 unittest 的功能。[官网](https://nose.readthedocs.org/en/latest/) - * contexts:一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。[官网](https://github.com/benjamin-hodgson/Contexts) + * contexts:一个 Python 3.3+ 的 BDD 框架。受到 C# – Machine.Specifications 的启发。[官网](https://github.com/benjamin-hodgson/Contexts) * hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。[官网](https://github.com/DRMacIver/hypothesis) - * mamba:Python 的终极测试工具, 拥护BDD。[官网](http://nestorsalceda.github.io/mamba/) + * mamba:Python 的终极测试工具, 拥护 BDD。[官网](http://nestorsalceda.github.io/mamba/) * PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。[官网](https://github.com/asweigart/pyautogui) * pyshould:Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。[官网](https://github.com/drslump/pyshould) * pytest:一个成熟的全功能 Python 测试工具。[官网](http://pytest.org/latest/) * green:干净,多彩的测试工具。[官网](https://github.com/CleanCut/green) - * pyvows:BDD 风格的测试工具,受Vows.js的启发。[官网](http://heynemann.github.io/pyvows/)- + * pyvows:BDD 风格的测试工具,受 Vows.js 的启发。[官网](http://heynemann.github.io/pyvows/)- * Robot Framework:一个通用的自动化测试框架。[官网](https://github.com/robotframework/robotframework) * Web 测试 * Selenium:[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。[官网](https://pypi.python.org/pypi/selenium) * locust:使用 Python 编写的,可扩展的用户加载测试工具。[官网](https://github.com/locustio/locust) * sixpack:一个和语言无关的 A/B 测试框架。[官网](https://github.com/seatgeek/sixpack) * splinter:开源的 web 应用测试工具。[官网](https://splinter.readthedocs.org/en/latest/) -* Mock测试 +* Mock 测试 * mock:(Python 标准库) 一个用于伪造测试的库。[官网](https://docs.python.org/3/library/unittest.mock.html) * doublex:Python 的一个功能强大的 doubles  测试框架。[官网](https://pypi.python.org/pypi/doublex) * freezegun:通过伪造日期模块来生成不同的时间。[官网](https://github.com/spulec/freezegun) @@ -860,19 +860,19 @@ Python实现的数据库。 * 错误处理 * FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。[官网](https://github.com/ajalt/fuckitpy) -### 代码分析和Lint工具 +### 代码分析和 Lint 工具 进行代码分析,解析和操作代码库的库和工具。 * 代码分析 * coala:语言独立和易于扩展的代码分析应用程序。[官网](http://coala-analyzer.org/) * code2flow:把你的 Python 和 JavaScript 代码转换为流程图。[官网](https://github.com/scottrogowski/code2flow) - * pycallgraph:这个库可以把你的Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) + * pycallgraph:这个库可以把你的 Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) -* Lint工具 +* Lint 工具 * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) - * YAPF: Google的Python代码格式化工具。[官网](https://github.com/google/yapf) + * YAPF: Google 的 Python 代码格式化工具。[官网](https://github.com/google/yapf) * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) * 代码格式化 * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) @@ -910,7 +910,7 @@ Python实现的数据库。 * [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) * NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) * Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) -* Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) +* Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) * [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) * Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) * [Open Mining](http://hao.jobbole.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) @@ -924,7 +924,7 @@ Python实现的数据库。 * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) -* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) +* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) ### 数据可视化 @@ -967,7 +967,7 @@ Python实现的数据库。 * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) -* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的python接口。[官网](http://caffe.berkeleyvision.org) +* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。[官网](http://caffe.berkeleyvision.org) * [Caffe2](https://github.com/caffe2/caffe2/):一个轻量级的,模块化的,可扩展的深度学习框架。[官网](https://caffe2.ai/) ### MapReduce @@ -992,7 +992,7 @@ MapReduce 框架和库。 ### 第三方 API -用来访问第三方 API的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 +用来访问第三方 API 的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 * apache-libcloud:一个为各种云设计的 Python 库。[官网](https://libcloud.apache.org/) * boto:Amazon Web Services 的 Python 接口。[官网](https://github.com/boto/boto) @@ -1055,19 +1055,19 @@ MapReduce 框架和库。 * [Pyston](http://hao.jobbole.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) * Stackless Python:一个强化版的 Python。[官网](https://bitbucket.org/stackless-dev/stackless/overview) -### 微软的 Windows平台 +### 微软的 Windows 平台 在 Windows 平台上进行 Python 编程。 * Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。[官网](http://python-xy.github.io/) * pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。[官网](http://www.lfd.uci.edu/~gohlke/pythonlibs/) * PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。[官网](https://github.com/pythonnet/pythonnet) -* PyWin32:针对 Windows 的Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) +* PyWin32:针对 Windows 的 Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) * WinPython:Windows 7/8 系统下便携式开发环境。[官网](https://winpython.github.io/) -### 网络可视化和SDN +### 网络可视化和 SDN -用来进行网络可视化和SDN(软件定义网络)的工具和库。 +用来进行网络可视化和 SDN(软件定义网络)的工具和库。 * Mininet:一款流行的网络模拟器以及用 Python 编写的 API。[官网](http://mininet.org/) * POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。[官网](https://github.com/noxrepo/pox) @@ -1082,12 +1082,12 @@ MapReduce 框架和库。 * Pyro:Python 机器人编程库。[官网](http://pyrorobotics.com/) * PyUserInput:跨平台的,控制鼠标和键盘的模块。[官网](https://github.com/SavinaRoja/PyUserInput) * scapy:一个非常棒的操作数据包的库。[官网](https://github.com/secdev/scapy) -* wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。[官网](https://wifi.readthedocs.org/en/latest/) -* Pingo:Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。[官网](http://www.pingo.io/) +* wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作 WiFi。[官网](https://wifi.readthedocs.org/en/latest/) +* Pingo:Pingo 为类似 Raspberry Pi,pcDuino, Intel Galileo 等设备提供统一的 API 用以编程。[官网](http://www.pingo.io/) ### 兼容性 -帮助从 Python 2 向 Python 3迁移的库。 +帮助从 Python 2 向 Python 3 迁移的库。 * Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。[官网](http://python-future.org/index.html) * Python-Modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。[官网](https://github.com/mitsuhiko/python-modernize) @@ -1109,7 +1109,7 @@ Python 实现的算法和设计模式。 * [algorithms](http://hao.jobbole.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) * python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) -* sortedcontainers:快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) +* sortedcontainers:快速,纯 Python 实现的 SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) ### 编辑器插件 @@ -1147,14 +1147,14 @@ Python 实现的算法和设计模式。 ### 金融数据 -* Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的Python开源数据。[官网](http://tushare.org) +* Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的 Python 开源数据。[官网](http://tushare.org) * Ta-Lib :金融数据技术分析库,可以依据原始金融数据计算各种技术指标,计算性能比较优异。[官网](https://www.ta-lib.org/) ### 持续集成 参见: [awesome-CIandCD](https://github.com/ciandcd/awesome-ciandcd#online-build-system). -* Travis CI:一个流行的工具,为你的开源和[私人](https://travis-ci.com/)项目提供持续集成服务。(仅支持 GitHub)[官网](https://travis-ci.org/) +* Travis CI:一个流行的工具,为你的开源和 [私人](https://travis-ci.com/) 项目提供持续集成服务。(仅支持 GitHub)[官网](https://travis-ci.org/) * CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)[官网](https://circleci.com/) * Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。[官网](https://vexor.io/) * Wercker:基于 Docker 平台,用来构建和部署微服务。[官网](http://wercker.com/) @@ -1197,16 +1197,16 @@ Python 实现的算法和设计模式。 * [@PythonWeekly](https://twitter.com/PythonWeekly) ### 学习指南 -* [Scipy-lecture-notes](http://hao.jobbole.com/scipy-lecture-notes/):如何用Python来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) -* [SScientific-python-lectures](http://hao.jobbole.com/scientific-python-lectures/):Python科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) -* [Mario-Level-1](http://hao.jobbole.com/mario-level-1/):用Python和Pygame写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) -* [Python Koans](http://hao.jobbole.com/python-koans/):Python的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) -* [Minecraft](http://hao.jobbole.com/minecraft-python/):用python写的Minecraft游戏。[官网](https://github.com/fogleman/Minecraft) -* [pycrumbs](http://hao.jobbole.com/python-pycrumbs/):Python资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) -* [python-patterns](http://hao.jobbole.com/python-patterns/):使用python实现设计模式。[官网](https://github.com/faif/python-patterns) -* [Projects](http://hao.jobbole.com/python-projects/):Python项目大集合。[官网](https://github.com/karan/Projects) -* [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的Python学习指南。[官网](http://docs.python-guide.org/en/latest/) -* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像Python高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html) +* [Scipy-lecture-notes](http://hao.jobbole.com/scipy-lecture-notes/):如何用 Python 来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) +* [SScientific-python-lectures](http://hao.jobbole.com/scientific-python-lectures/):Python 科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) +* [Mario-Level-1](http://hao.jobbole.com/mario-level-1/):用 Python 和 Pygame 写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) +* [Python Koans](http://hao.jobbole.com/python-koans/):Python 的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) +* [Minecraft](http://hao.jobbole.com/minecraft-python/):用 python 写的 Minecraft 游戏。[官网](https://github.com/fogleman/Minecraft) +* [pycrumbs](http://hao.jobbole.com/python-pycrumbs/):Python 资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) +* [python-patterns](http://hao.jobbole.com/python-patterns/):使用 python 实现设计模式。[官网](https://github.com/faif/python-patterns) +* [Projects](http://hao.jobbole.com/python-projects/):Python 项目大集合。[官网](https://github.com/karan/Projects) +* [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的 Python 学习指南。[官网](http://docs.python-guide.org/en/latest/) +* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像 Python 高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html)

知名网站

*值得关注的 Python 技术站点。* @@ -1221,5 +1221,5 @@ Python 实现的算法和设计模式。

微博、微信公众号

* Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) -* Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享Python技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。 +* Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享 Python 技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。
From 83c853ecb209c0aa3ba97c240dd57e818ef77878 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Tue, 9 Jan 2018 11:59:58 +0800 Subject: [PATCH 064/143] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=95=B4=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E5=8F=A5=E6=9C=AB=E5=BA=94=E5=BD=93=E6=9C=89=E5=8F=A5?= =?UTF-8?q?=E5=8F=B7=E7=BB=93=E5=B0=BE=E5=86=8D=E5=8A=A0=E5=AE=98=E7=BD=91?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 9a7bd07..9f79841 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) * [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) -* ptpython:高级交互式 Python 解析器, 构建于[python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) +* ptpython:高级交互式 Python 解析器, 构建于 [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) ### 文件 @@ -131,7 +131,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。[官网](https://pathlib.readthedocs.org/en/pep428/) * python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。[官网](https://github.com/ahupp/python-magic) * Unipath:用面向对象的方式操作文件和目录。[官网](https://github.com/mikeorr/Unipath) -* watchdog:管理文件系统事件的 API 和 shell 工具[官网](https://github.com/gorakhargosh/watchdog) +* watchdog:管理文件系统事件的 API 和 shell 工具。[官网](https://github.com/gorakhargosh/watchdog) ### 日期和时间 @@ -313,16 +313,16 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * audiolazy:Python 的数字信号处理包。[官网](https://github.com/danilobellini/audiolazy) * audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) -* beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具[官网](http://beets.io/) -* dejavu:音频指纹提取和识别[官网](https://github.com/worldveil/dejavu) +* beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具。[官网](http://beets.io/) +* dejavu:音频指纹提取和识别。[官网](https://github.com/worldveil/dejavu) * [django-elastic-transcoder](http://hao.jobbole.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) * eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) * id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) * m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) * mutagen:一个用来处理音频元数据的 Python 模块。[官网](https://bitbucket.org/lazka/mutagen) * pydub:通过简单、简洁的高层接口来操作音频文件。[官网](https://github.com/jiaaro/pydub) -* pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端[官网](https://github.com/echonest/pyechonest) -* talkbox:一个用来处理演讲/信号的 Python 库[官网](http://scikits.appspot.com/talkbox) +* pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端。[官网](https://github.com/echonest/pyechonest) +* talkbox:一个用来处理演讲/信号的 Python 库。[官网](http://scikits.appspot.com/talkbox) * TimeSide:开源 web 音频处理框架。[官网](https://github.com/Parisson/TimeSide) * tinytag:一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) * mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。[官网](http://bspaans.github.io/python-mingus/) @@ -578,7 +578,7 @@ Python 实现的数据库。 * django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。[官网](https://github.com/StreetVoice/django-celery-ses) * envelopes:供人类使用的电子邮件库。[官网](http://tomekwojcik.github.io/envelopes/) * flanker:一个 email 地址和 Mime 解析库。[官网](https://github.com/mailgun/flanker) -* imbox:Python IMAP 库[官网](https://github.com/martinrusev/imbox) +* imbox:Python IMAP 库。[官网](https://github.com/martinrusev/imbox) * inbox.py:Python SMTP 服务器。[官网](https://github.com/kennethreitz/inbox.py) * inbox:一个开源电子邮件工具箱。[官网](https://github.com/nylas/sync-engine) * lamson:Python 风格的 SMTP 应用服务器。[官网](https://github.com/zedshaw/lamson) @@ -637,7 +637,7 @@ Python 实现的数据库。 用于进行网页内容提取的库。 * Haul:一个可以扩展的图像爬取工具。[官网](https://github.com/vinta/Haul) -* html2text:将 HTML 转换为 Markdown 格式文本[官网](https://github.com/Alir3z4/html2text) +* html2text:将 HTML 转换为 Markdown 格式文本。[官网](https://github.com/Alir3z4/html2text) * lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) * micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) * [newspaper](http://hao.jobbole.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) @@ -722,7 +722,7 @@ Python 实现的数据库。 * multiprocessing:(Python 标准库) 基于进程的“线程”接口。[官网](https://docs.python.org/2/library/multiprocessing.html) * threading:(Python 标准库)更高层的线程接口。[官网](https://docs.python.org/2/library/threading.html) * eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) -* gevent:一个基于协程的 Python 网络库,使用[greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) +* gevent:一个基于协程的 Python 网络库,使用 [greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) * Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) * uvloop:在 libuv 之上超快速实现 asyncio 事件循环。[官网](https://github.com/MagicStack/uvloop) @@ -792,7 +792,7 @@ Python 实现的数据库。 * Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。[官网](https://github.com/pybee/toga) * urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。[官网](http://urwid.org/) * wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。[官网](http://wxpython.org/) -* PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定[官网](https://wiki.gnome.org/Projects/PyGObject) +* PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。[官网](https://wiki.gnome.org/Projects/PyGObject) * Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。[官网](https://github.com/zoofIO/flexx) ### 游戏开发 @@ -849,7 +849,7 @@ Python 实现的数据库。 * 对象工厂 * factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。[官网](https://github.com/rbarrois/factoryboy) * mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。[官网](https://github.com/klen/mixer) - * modelmommy:为 Django 测试创建随机固件[官网](https://github.com/vandersonmota/modelmommy) + * modelmommy:为 Django 测试创建随机固件。[官网](https://github.com/vandersonmota/modelmommy) * 代码覆盖率 * coverage:代码覆盖率测量。[官网](https://pypi.python.org/pypi/coverage) * Codecov:一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。[官网](https://codecov.io/) @@ -904,7 +904,7 @@ Python 实现的数据库。 * astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) * [bcbio-nextgen](http://hao.jobbole.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) -* bccb:生物分析相关代码集合[官网](https://github.com/chapmanb/bcbb) +* bccb:生物分析相关代码集合。[官网](https://github.com/chapmanb/bcbb) * Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) * [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) * [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) @@ -924,7 +924,7 @@ Python 实现的数据库。 * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) -* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络[官网](https://keras.io/) +* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络。[官网](https://keras.io/) ### 数据可视化 @@ -979,7 +979,7 @@ MapReduce 框架和库。 * luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) * mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) * PySpark:Spark 的 Python API 。[官网](http://spark.apache.org/docs/latest/programming-guide.html) -* streamparse:运行针对事实数据流的 Python 代码。集成了[Apache Storm](http://storm.apache.org/)。[官网](https://github.com/Parsely/streamparse) +* streamparse:运行针对事实数据流的 Python 代码。集成了 [Apache Storm](http://storm.apache.org/)。[官网](https://github.com/Parsely/streamparse) ### 函数式编程 @@ -1017,7 +1017,7 @@ MapReduce 框架和库。 * Fabtools:一个用来编写超赞的 Fabric 文件的工具。[官网](https://github.com/ronnix/fabtools) * gitapi:Git 的纯 Python API。[官网](https://bitbucket.org/haard/gitapi) * hgapi:Mercurial 的纯 Python API。[官网](https://bitbucket.org/haard/hgapi) -* honcho:[Foreman](https://github.com/ddollar/foreman)的 Python 克隆版,用来管理基于[Procfile](https://devcenter.heroku.com/articles/procfile)的应用。[官网](https://github.com/nickstenning/honcho) +* honcho:[Foreman](https://github.com/ddollar/foreman)的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile)的应用。[官网](https://github.com/nickstenning/honcho) * pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。[官网](https://github.com/pexpect/pexpect) * psutil:一个跨平台进程和系统工具模块。[官网](https://github.com/giampaolo/psutil) * supervisor:UNIX 的进程控制系统。[官网](https://github.com/Supervisor/supervisor) @@ -1078,7 +1078,7 @@ MapReduce 框架和库。 用来对硬件进行编程的库。 -* ino:操作[Arduino](https://www.arduino.cc/)的命令行工具。[官网](http://inotool.org/) +* ino:操作 [Arduino](https://www.arduino.cc/) 的命令行工具。[官网](http://inotool.org/) * Pyro:Python 机器人编程库。[官网](http://pyrorobotics.com/) * PyUserInput:跨平台的,控制鼠标和键盘的模块。[官网](https://github.com/SavinaRoja/PyUserInput) * scapy:一个非常棒的操作数据包的库。[官网](https://github.com/secdev/scapy) @@ -1125,7 +1125,7 @@ Python 实现的算法和设计模式。 * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) * Visual Studio - * PTVS:Visual Studio 的 Python 工具[官网](https://github.com/Microsoft/PTVS) + * PTVS:Visual Studio 的 Python 工具。[官网](https://github.com/Microsoft/PTVS) ### 集成开发环境 From aaa7513d1987e5c9291788d657770bf1aac5618f Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Tue, 9 Jan 2018 12:10:47 +0800 Subject: [PATCH 065/143] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E6=95=B4=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E7=BB=9F=E4=B8=80=20simplejson=20=E5=BA=93=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9f79841..6afb04e 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * simplejson:Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/)、[GitHub](https://github.com/simplejson/simplejson) + * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/) * Slug 化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From fa4311e8f595cff904ec4bbc537acbd16d444ce3 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Wed, 10 Jan 2018 14:03:46 +0800 Subject: [PATCH 066/143] update Carteblanche, money, Cerberus description --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6afb04e..37316d5 100644 --- a/README.md +++ b/README.md @@ -434,7 +434,7 @@ Python 实现的数据库。 允许或拒绝用户访问数据或功能的库。 -* Carteblanche:Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.[官网](https://github.com/neuman/python-carteblanche/) +* Carteblanche:站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。[官网](https://github.com/neuman/python-carteblanche/) * django-guardian:Django 1.2+ 实现了单个对象权限。[官网](https://github.com/django-guardian/django-guardian) * django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。[官网](https://github.com/dfunckt/django-rules) @@ -464,7 +464,7 @@ Python 实现的数据库。 * shoop:一个基于 Django 的开源电子商务平台。[官网](https://www.shoop.io/en/) * alipay:非官方的 Python 支付宝 API。[官网](https://github.com/lxneng/alipay) * merchant:一个可以接收来自多种支付平台支付的 Django 应用。[官网](https://github.com/agiliq/merchant) -* money:货币类库 with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.[官网](https://github.com/carlospalol/money) +* money:一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。[官网](https://github.com/carlospalol/money) * python-currencies:显示货币格式以及它的数值。[官网](https://github.com/Alir3z4/python-currencies) ### RESTful API @@ -663,7 +663,7 @@ Python 实现的数据库。 数据验证库。多用于表单验证。 -* Cerberus:A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition.[官网](http://docs.python-cerberus.org/en/stable/) +* Cerberus:一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。[官网](http://docs.python-cerberus.org/en/stable/) * colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。[官网](http://docs.pylonsproject.org/projects/colander/en/latest/) * kmatch:一种用于匹配/验证/筛选 Python 字典的语言。[官网](https://github.com/ambitioninc/kmatch) * schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) @@ -947,8 +947,8 @@ Python 实现的数据库。 计算机视觉库。 * OpenCV:开源计算机视觉库。[官网](http://opencv.org/) -*   pyocr:Tesseract 和 Cuneiform 的包装库。[官网](https://github.com/jflesch/pyocr) -*   pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。[官网](https://github.com/madmaze/pytesseract) +* pyocr:Tesseract 和 Cuneiform 的包装库。[官网](https://github.com/jflesch/pyocr) +* pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。[官网](https://github.com/madmaze/pytesseract) * [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) ### 机器学习 @@ -1209,6 +1209,7 @@ Python 实现的算法和设计模式。 * [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像 Python 高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html)

知名网站

+ *值得关注的 Python 技术站点。*

中文站点

@@ -1220,6 +1221,7 @@ Python 实现的算法和设计模式。 * 《[值得关注的 10 个 Python 英文博客](http://python.jobbole.com/81730/)》

微博、微信公众号

+ * Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) * Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享 Python 技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。
From 170fb6ff3f962243b0eb9c518072dd43df64c61b Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 11 Jan 2018 21:00:09 +0800 Subject: [PATCH 067/143] =?UTF-8?q?=E8=B0=83=E6=95=B4=20keras=20=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E4=BD=8D=E7=BD=AE=EF=BC=8C=E7=A7=BB=E5=8A=A8=E8=87=B3?= =?UTF-8?q?=E6=B7=B1=E5=BA=A6=E5=AD=A6=E4=B9=A0=E6=A8=A1=E5=9D=97=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37316d5..184219a 100644 --- a/README.md +++ b/README.md @@ -924,7 +924,6 @@ Python 实现的数据库。 * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) * [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) -* keras: 以 tensorflow 或者 theano 为后端的深度学习封装库,快速上手神经网络。[官网](https://keras.io/) ### 数据可视化 @@ -958,6 +957,7 @@ Python 实现的数据库。 * Crab:灵活、快速的推荐引擎。[官网](https://github.com/muricoca/crab) * gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) * hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) +* [keras](https://github.com/keras-team/keras): 以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。[官网](https://keras.io/) * NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) * [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) From 7c92a7b8dd908cd5f62fe5c50f0250500956acd9 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 11 Jan 2018 21:01:48 +0800 Subject: [PATCH 068/143] =?UTF-8?q?=E6=8C=89=E5=AD=97=E6=AF=8D=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E8=B0=83=E6=95=B4=20caffe/caffe2=20=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E5=BA=93=E7=9A=84=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 184219a..6d2bbf0 100644 --- a/README.md +++ b/README.md @@ -954,6 +954,8 @@ Python 实现的数据库。 机器学习库。 参见: [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python). +* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。[官网](http://caffe.berkeleyvision.org) +* [Caffe2](https://github.com/caffe2/caffe2/):一个轻量级的,模块化的,可扩展的深度学习框架。[官网](https://caffe2.ai/) * Crab:灵活、快速的推荐引擎。[官网](https://github.com/muricoca/crab) * gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) * hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) @@ -967,8 +969,6 @@ Python 实现的数据库。 * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) -* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。[官网](http://caffe.berkeleyvision.org) -* [Caffe2](https://github.com/caffe2/caffe2/):一个轻量级的,模块化的,可扩展的深度学习框架。[官网](https://caffe2.ai/) ### MapReduce From a5a5c315a857f34fb8e7f639f5d86363030f78ce Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 11 Jan 2018 21:08:37 +0800 Subject: [PATCH 069/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20TensorFlow=20?= =?UTF-8?q?=E6=B7=B1=E5=BA=A6=E5=AD=A6=E4=B9=A0=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6d2bbf0..9addb1e 100644 --- a/README.md +++ b/README.md @@ -969,6 +969,7 @@ Python 实现的数据库。 * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) +* [TensorFlow](https://github.com/tensorflow/tensorflow):谷歌开源的最受欢迎的深度学习框架。[官网](http://tensorflow.org/) ### MapReduce From 9c0bff65cc0383240f0ffc82b207d6f8c3758a6b Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 11 Jan 2018 21:16:16 +0800 Subject: [PATCH 070/143] =?UTF-8?q?=E9=83=A8=E5=88=86=E5=BA=93=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E6=95=B4=E4=BB=A5=E5=8F=8A=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9addb1e..cde7de6 100644 --- a/README.md +++ b/README.md @@ -368,7 +368,7 @@ Python 实现的数据库。 用来连接和操作数据库的库。 -* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/)系列 +* MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/) 系列 * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) @@ -399,7 +399,7 @@ Python 实现的数据库。 * 关系型数据库 * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) - * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy)系列 + * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 * [Peewee](http://hao.jobbole.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) @@ -418,11 +418,11 @@ Python 实现的数据库。 全栈 Web 框架。 * [Django](http://hao.jobbole.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) - * [awesome-django](https://gitlab.com/rosarior/awesome-django)系列 + * [awesome-django](https://gitlab.com/rosarior/awesome-django) 系列 * [Flask](http://hao.jobbole.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) - * [awesome-flask](https://github.com/humiaozuzu/awesome-flask)系列 + * [awesome-flask](https://github.com/humiaozuzu/awesome-flask) 系列 * pyramid:一个小巧,快速,接地气的开源 Python web 框架。 - * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid)系列 + * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) 系列 * [Bottle](http://hao.jobbole.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) * CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。[官网](http://www.cherrypy.org/) * TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) @@ -536,7 +536,7 @@ Python 实现的数据库。 * django-haystack:Django 模块化搜索。[官网](https://github.com/django-haystack/django-haystack) * elasticsearch-py:Elasticsearch 的官方底层 Python 客户端。[官网](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html) * elasticsearch-dsl-py:Elasticsearch 的官方高级 Python 客户端。[官网](https://github.com/elastic/elasticsearch-dsl-py) -* solrpy:[solr](http://lucene.apache.org/solr/)的 Python 客户端。[官网](https://github.com/edsu/solrpy) +* solrpy:[solr](http://lucene.apache.org/solr/) 的 Python 客户端。[官网](https://github.com/edsu/solrpy) * Whoosh:一个快速的纯 Python 搜索引擎库。[官网](http://whoosh.readthedocs.org/en/latest/) ### 动态消息 @@ -742,7 +742,7 @@ Python 实现的数据库。 帮助使用 WebSocket 的库。 * AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。[官网](https://github.com/crossbario/autobahn-python) -* Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn).[官网](https://github.com/crossbario/crossbar/) +* Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn)。[官网](https://github.com/crossbario/crossbar/) * django-socketio:给 Django 用的 WebSockets。[官网](https://github.com/stephenmcd/django-socketio) * WebSocket-for-Python:为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) @@ -831,7 +831,7 @@ Python 实现的数据库。 * pyshould:Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。[官网](https://github.com/drslump/pyshould) * pytest:一个成熟的全功能 Python 测试工具。[官网](http://pytest.org/latest/) * green:干净,多彩的测试工具。[官网](https://github.com/CleanCut/green) - * pyvows:BDD 风格的测试工具,受 Vows.js 的启发。[官网](http://heynemann.github.io/pyvows/)- + * pyvows:BDD 风格的测试工具,受 Vows.js 的启发。[官网](http://heynemann.github.io/pyvows/) * Robot Framework:一个通用的自动化测试框架。[官网](https://github.com/robotframework/robotframework) * Web 测试 * Selenium:[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。[官网](https://pypi.python.org/pypi/selenium) @@ -965,11 +965,11 @@ Python 实现的数据库。 * [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) * [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) * [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) -* scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) -* vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) +* scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) * [TensorFlow](https://github.com/tensorflow/tensorflow):谷歌开源的最受欢迎的深度学习框架。[官网](http://tensorflow.org/) +* vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) ### MapReduce @@ -1018,7 +1018,7 @@ MapReduce 框架和库。 * Fabtools:一个用来编写超赞的 Fabric 文件的工具。[官网](https://github.com/ronnix/fabtools) * gitapi:Git 的纯 Python API。[官网](https://bitbucket.org/haard/gitapi) * hgapi:Mercurial 的纯 Python API。[官网](https://bitbucket.org/haard/hgapi) -* honcho:[Foreman](https://github.com/ddollar/foreman)的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile)的应用。[官网](https://github.com/nickstenning/honcho) +* honcho:[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile) 的应用。[官网](https://github.com/nickstenning/honcho) * pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。[官网](https://github.com/pexpect/pexpect) * psutil:一个跨平台进程和系统工具模块。[官网](https://github.com/giampaolo/psutil) * supervisor:UNIX 的进程控制系统。[官网](https://github.com/Supervisor/supervisor) From a33367fb0629630cd4bc5988584bf005fd58c289 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 11 Jan 2018 21:23:22 +0800 Subject: [PATCH 071/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20pypinyin=20?= =?UTF-8?q?=E5=BA=93=EF=BC=8C=E5=B9=B6=E6=8C=89=E5=AD=97=E6=AF=8D=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E8=B0=83=E6=95=B4=E5=BA=93=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cde7de6..49df5b1 100644 --- a/README.md +++ b/README.md @@ -158,12 +158,13 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) * Levenshtein:快速计算编辑距离以及字符串的相似度。[官网](https://github.com/ztane/python-Levenshtein/) * pangu.py:在中日韩语字符和数字字母之间添加空格。[官网](https://github.com/vinta/pangu.py) - * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python 实现。 + * pypinyin:汉字拼音转换工具 Python 版。[官网](https://github.com/mozillazg/python-pinyin) * shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。[官网](https://github.com/stochastic-technologies/shortuuid) + * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/) * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/) + * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python 实现。 * Slug 化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From db3a926b79d3d872641b77c780b9a2d1d39630fc Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sat, 13 Jan 2018 21:46:18 +0800 Subject: [PATCH 072/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20Pytorch,Theano,Mxn?= =?UTF-8?q?et=20=E4=B8=89=E4=B8=AA=E6=B7=B1=E5=BA=A6=E5=AD=A6=E4=B9=A0?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 49df5b1..c91f005 100644 --- a/README.md +++ b/README.md @@ -961,15 +961,18 @@ Python 实现的数据库。 * gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) * hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) * [keras](https://github.com/keras-team/keras): 以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。[官网](https://keras.io/) +* [MXNet](https://github.com/apache/incubator-mxnet):一个高效和灵活的深度学习框架。[官网](http://mxnet.incubator.apache.org/) * NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) * [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) +* pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) * [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) * [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) -* pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) +* [Pytorch](https://github.com/pytorch/pytorch):一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。[官网](http://pytorch.org/) * scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) * [TensorFlow](https://github.com/tensorflow/tensorflow):谷歌开源的最受欢迎的深度学习框架。[官网](http://tensorflow.org/) +* Theano:一个快速数值计算库。[官网](https://github.com/Theano/Theano) * vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) ### MapReduce From 19edac4ac5747f74379fbd2594f75a06eb68f177 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sat, 13 Jan 2018 21:52:33 +0800 Subject: [PATCH 073/143] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c91f005..ad4b8b6 100644 --- a/README.md +++ b/README.md @@ -306,7 +306,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) * [pytesseract](http://hao.jobbole.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) -* python-tesseract - [Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 +* python-tesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 ### 音频 @@ -818,7 +818,7 @@ Python 实现的数据库。 * Raven:Sentry 的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) * Sentry:实时记录和收集日志的服务器。[官网](https://pypi.python.org/pypi/sentry) -### Testing +### 测试 进行代码库测试和生成测试数据的库。 @@ -878,7 +878,7 @@ Python 实现的数据库。 * 代码格式化 * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) -### Debugging Tools +### 调试工具 用来进行代码调试的库。 @@ -899,7 +899,7 @@ Python 实现的数据库。 * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) * python-statsd:[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。[官网](https://github.com/WoLpH/python-statsd) -### Science and Data Analysis +### 科学计算和数据分析 用来进行科学计算和数据分析的库。 From 1a742b7d760390758f7e150deafa9683ea98008d Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 1 Feb 2018 15:27:40 +0800 Subject: [PATCH 074/143] =?UTF-8?q?=E6=95=B4=E7=90=86=EF=BC=9A=E4=B8=80?= =?UTF-8?q?=E7=82=B9=E6=A0=BC=E5=BC=8F=E5=B0=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ad4b8b6..6bb3c26 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[陈键冬](https://github.com/chenjiandongx) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx) 注:名单不分排名,不定期补充更新 @@ -85,8 +85,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 本地 PyPI 仓库服务和代理。 -* warehouse:下一代 PyPI。[官网](https://github.com/pypa/warehouse) - * Warehouse:[预览](https://pypi.org/) +* [warehouse](https://pypi.org/):下一代 PyPI。[官网](https://github.com/pypa/warehouse) * bandersnatch:PyPA 提供的 PyPI 镜像工具。[官网](https://bitbucket.org/pypa/bandersnatch) * devpi:PyPI 服务和打包/测试/分发工具。[官网](http://doc.devpi.net/) * localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。[官网](https://github.com/mvantellingen/localshop) @@ -520,7 +519,7 @@ Python 实现的数据库。 * Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) * Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) -### Queue +### 队列 处理事件以及任务队列的库。 From db028c2b8330f739db4f2bf58629ba126e9edf88 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 1 Feb 2018 15:36:37 +0800 Subject: [PATCH 075/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20sanic=20=E5=92=8C?= =?UTF-8?q?=20Toapi=20=E4=B8=A4=E4=B8=AA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6bb3c26..e28e692 100644 --- a/README.md +++ b/README.md @@ -429,6 +429,7 @@ Python 实现的数据库。 * [web.py](http://hao.jobbole.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) * web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) * [Tornado](http://hao.jobbole.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) +* sanic:基于 Python3.5+ 的异步网络框架。[官网](https://github.com/channelcat/sanic/) ### 权限 @@ -735,6 +736,7 @@ Python 实现的数据库。 * pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) * diesel:基于 Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) * pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) +* Toapi:一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。[官网](https://github.com/gaojiuli/toapi) * txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。[官网](https://github.com/smira/txZMQ) ### WebSocket From 7873621106f129f480761bfa182dc9bc8bfd2706 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 1 Mar 2018 12:50:49 +0800 Subject: [PATCH 076/143] update contribution info --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e28e692..2357aef 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,14 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 如何参与本项目? -从下面的目录来看,本项目的工作量小不了,所以非常期待能有更多程序员一起来参与。 + * * * @@ -50,7 +50,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * * * -### 奖励计划 + ### 环境管理 From cd75e19a56f88a4fcdafa0c674c509b2e69fcae7 Mon Sep 17 00:00:00 2001 From: autopenguin Date: Sun, 4 Mar 2018 22:40:55 +0800 Subject: [PATCH 077/143] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增AirFlow的说明。 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2357aef..3908170 100644 --- a/README.md +++ b/README.md @@ -1040,8 +1040,9 @@ MapReduce 框架和库。 * Plan:如有神助地编写 crontab 文件。[官网](https://github.com/fengsp/plan) * schedule:人性化的 Python 任务调度库。[官网](https://github.com/dbader/schedule) * Spiff:使用纯 Python 实现的强大的工作流引擎。[官网](https://github.com/knipknap/SpiffWorkflow) -* TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。[官网](http://docs.openstack.org/developer/taskflow/) - +*   TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。[官网](http://docs.openstack.org/developer/taskflow/) +*  AirFlow:Airflow 是Airbnb公司开源的,是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。[官方](https://airflow.incubator.apache.org/) +  ### 外来函数接口 使用外来函数接口的库。 From 60ca72fee55e79cc87bdd6068cdb7e9b54be7b72 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 5 Mar 2018 10:25:15 +0800 Subject: [PATCH 078/143] add contributor autopenguin --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3908170..baf099a 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin) 注:名单不分排名,不定期补充更新 From 1b5e59bd87e88502e4b37315708a59c7b56d8633 Mon Sep 17 00:00:00 2001 From: visonforcoding Date: Fri, 16 Mar 2018 11:38:59 +0800 Subject: [PATCH 079/143] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AANLP=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index baf099a..a4c95b2 100644 --- a/README.md +++ b/README.md @@ -218,6 +218,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * SnowNLP:一个用来处理中文文本的库。[官网](https://github.com/isnowfy/snownlp) * TextBlob:为进行普通自然语言处理任务提供一致的 API。[官网](http://textblob.readthedocs.org/en/latest/) * TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。[官网](https://github.com/2shou/TextGrocery) +*   thulac:清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包[官网](https://github.com/thunlp/THULAC-Python) ### 文档 From b4fdf4a74025250b2eea1e4647801b9aeff1a8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B0=A4=E5=8D=8E?= Date: Sat, 17 Mar 2018 09:25:20 +0800 Subject: [PATCH 080/143] add contributor visonforcoding --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4c95b2..3485092 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding) 注:名单不分排名,不定期补充更新 From 4ddf87f9c1cd30daa7ec7677dec24a9fb7df3bb3 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Fri, 30 Mar 2018 15:57:34 +0800 Subject: [PATCH 081/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20maya=20=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=A4=84=E7=90=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3485092..908b0c3 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) * dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) * delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) +* maya:一个更友好的时间处理库。[官网](https://github.com/kennethreitz/maya) * moment:一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。[官网](https://github.com/zachwill/moment) * pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。[官网](https://github.com/sdispater/pendulum) * PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) From 0614f9b6a60c9df3ffcc8e083c28b703500a47cb Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Fri, 30 Mar 2018 16:06:49 +0800 Subject: [PATCH 082/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20aiohttp=20?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 908b0c3..432711e 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) * dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) * delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) -* maya:一个更友好的时间处理库。[官网](https://github.com/kennethreitz/maya) +* maya:人性化的时间处理库。[官网](https://github.com/kennethreitz/maya) * moment:一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。[官网](https://github.com/zachwill/moment) * pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。[官网](https://github.com/sdispater/pendulum) * PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) @@ -350,7 +350,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### HTTP 使用 HTTP 的库。 - +* aiohttp:基于 asyncio 的异步 HTTP 网络库。[官网](https://github.com/aio-libs/aiohttp) * requests:人性化的 HTTP 请求库。[官网](http://docs.python-requests.org/en/latest/) * grequests:requests 库 + gevent ,用于异步 HTTP 请求.[官网](https://github.com/kennethreitz/grequests) * httplib2:全面的 HTTP 客户端库。[官网](https://github.com/jcgregorio/httplib2) From c2a5fad759be01edcf2ae904fdaa970e3044b0e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B0=A4=E5=8D=8E?= Date: Sun, 1 Apr 2018 07:26:50 +0800 Subject: [PATCH 083/143] =?UTF-8?q?add=20NRU=20and=20contributor=20Super?= =?UTF-8?q?=E8=B5=9B=E4=BA=9A=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 432711e..51dc1eb 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96) 注:名单不分排名,不定期补充更新 @@ -1081,7 +1081,8 @@ MapReduce 框架和库。 * Mininet:一款流行的网络模拟器以及用 Python 编写的 API。[官网](http://mininet.org/) * POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。[官网](https://github.com/noxrepo/pox) * Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。[官网](http://frenetic-lang.org/pyretic/) -* SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。[官网](https://github.com/sdn-ixp/internet2award) +*   SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。[官网](https://github.com/sdn-ixp/internet2award) +*   NRU:一个基于组件的软件定义网络框架。[官网](http://ryu.readthedocs.io/en/latest/) ### 硬件 From 6f81ed4655904c65989a7e3ea26a6541844b06e3 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sun, 1 Apr 2018 17:37:15 +0800 Subject: [PATCH 084/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20aiomysql,=20aiofil?= =?UTF-8?q?es=20=E4=B8=A4=E4=B8=AA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 51dc1eb..c301822 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 +* aiofiles:基于 asyncio,提供文件异步操作。[官网](https://github.com/Tinche/aiofiles) * imghdr:(Python 标准库)检测图片类型。[官网](https://docs.python.org/2/library/imghdr.html) * mimetypes:(Python 标准库)将文件名映射为 MIME 类型。[官网](https://docs.python.org/2/library/mimetypes.html) * path.py:对 os.path 进行封装的模块。[官网](https://github.com/jaraco/path.py) @@ -371,9 +372,10 @@ Python 实现的数据库。 用来连接和操作数据库的库。 * MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/) 系列 + * aiomysql:基于 asyncio 的异步 MySQL 数据库操作库。[官网](https://github.com/aio-libs/aiomysql) * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 - * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.[官网](https://pythonhosted.org/oursql/) + * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs。[官网](https://pythonhosted.org/oursql/) * PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。[官网](https://github.com/PyMySQL/PyMySQL) * PostgreSQL * psycopg2:Python 中最流行的 PostgreSQL 适配器。[官网](http://initd.org/psycopg/) From 44454139c8233386317972bd2cb695d6b19a36e3 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sun, 1 Apr 2018 17:41:24 +0800 Subject: [PATCH 085/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20pyexcel=20?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c301822..83b133b 100644 --- a/README.md +++ b/README.md @@ -188,12 +188,13 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Office * Marmir:把输入的 Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) * openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。[官网](https://openpyxl.readthedocs.org/en/latest/) + * pyexcel:一个提供统一 API,用来读写,操作 Excel 文件的库。[官网](https://github.com/pyexcel/pyexcel) * python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。[官网](https://github.com/python-openxml/python-docx) + * relatorio:模板化 OpenDocument 文件。[官网](http://relatorio.tryton.org/) * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) - * relatorio:模板化 OpenDocument 文件。[官网](http://relatorio.tryton.org/) * PDF * PDFMiner:一个用于从 PDF 文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) From 1285073dc4c1c313cb7457a5a4d82a83fa0e4b80 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sun, 1 Apr 2018 17:44:27 +0800 Subject: [PATCH 086/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20requests-html=20?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 83b133b..74ce994 100644 --- a/README.md +++ b/README.md @@ -622,6 +622,7 @@ Python 实现的数据库。 * lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) * MarkupSafe:为 Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) * pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) +* requests-html:人性化的,Pythonic 的 HTML 解析库。[官网](https://github.com/kennethreitz/requests-html) * untangle:将 XML 文档转换为 Python 对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) * xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) * xmltodict:像处理 JSON 一样处理 XML。[官网](https://github.com/martinblech/xmltodict) From 0c7251b3d472db2c4c371d396ddf4a8e1438e4ad Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Sun, 15 Apr 2018 21:16:02 +0800 Subject: [PATCH 087/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20black=20=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 74ce994..29edc93 100644 --- a/README.md +++ b/README.md @@ -884,6 +884,7 @@ Python 实现的数据库。 * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) * 代码格式化 * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) + * black:一个坚定的 Python 代码格式化工具。[官网](https://github.com/ambv/black) ### 调试工具 From 4a30781e967aa88c94ee5711abcdb005c60ac14d Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Mon, 28 May 2018 16:05:57 +0800 Subject: [PATCH 088/143] =?UTF-8?q?Update:=20=E5=88=A0=E5=87=8F=20readme?= =?UTF-8?q?=20=E6=B3=A8=E9=87=8A=E7=89=87=E6=AE=B5=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=85=B6=E4=BB=96=E9=A1=B9=E7=9B=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E4=BA=8E=E7=94=9F=E6=88=90=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 9 +++++++++ Makefile | 12 ++++++++++++ README.md | 27 --------------------------- docs/.gitkeep | 0 mkdocs.yml | 16 ++++++++++++++++ 5 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 docs/.gitkeep create mode 100644 mkdocs.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c3a1a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# MacOS +.DS_Store + +# for docs +docs/index.md +site/ + +# for vscode +.vscode/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..42273f3 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +site_install: + pip install mkdocs==0.16.3 + pip install mkdocs-material==1.12.2 + +site_link: + ln -sf $(CURDIR)/README.md $(CURDIR)/docs/index.md + +site_preview: site_link + mkdocs serve + +site_deploy: site_link + mkdocs gh-deploy --clean diff --git a/README.md b/README.md index 29edc93..8d38b00 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 -* * * ### 我们要做什么? @@ -13,20 +12,6 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 - 《[Scrapy:Python 的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 - 《[Flask:一个使用 Python 编写的轻量级 Web 应用框架](http://hao.jobbole.com/flask/)》 -* * * - -### 如何参与本项目? - - - -* * * ### 如何为列表贡献新资源? @@ -39,7 +24,6 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 感谢您的贡献! -* * * ### 本项目的参与者 @@ -48,17 +32,6 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 注:名单不分排名,不定期补充更新 -* * * - - ### 环境管理 diff --git a/docs/.gitkeep b/docs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..ea41a23 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,16 @@ +site_name: 'Python 资源大全中文版' +site_url: 'https://github.com/jobbole/awesome-python-cn/' +site_author: 'jobbole' +repo_name: 'jobbole/awesome-python-cn/' +repo_url: 'https://github.com/jobbole/awesome-python-cn/' +theme: 'material' +extra: + feature: + tabs: false + primary: 'blue' + accent: 'blue' + social: + - type: 'github' + link: 'https://github.com/jobbole/awesome-python-cn/' +pages: + - "人生苦短,我用 Python": "index.md" From 6d7399c0e2a701cda8e29668695fc6e47b51f543 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Wed, 30 May 2018 23:53:50 +0800 Subject: [PATCH 089/143] =?UTF-8?q?Add:=20=E6=96=B0=E5=A2=9E=E6=A0=87?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8d38b00..e1d3aea 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 +## 关于项目 + ### 我们要做什么? - 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 @@ -33,6 +35,8 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 注:名单不分排名,不定期补充更新 +## 资源列表 + ### 环境管理 管理 Python 版本和环境的工具 From b8f24573b642f16f93847504834a10da04736f95 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Wed, 30 May 2018 23:55:49 +0800 Subject: [PATCH 090/143] =?UTF-8?q?Add:=20=E6=96=B0=E5=A2=9E=20LICENSE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..81901d3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +Creative Commons Attribution 4.0 International License (CC BY 4.0) + +http://creativecommons.org/licenses/by/4.0/ From 615dd6dc6f1e44ecd074e32736480b74391640a8 Mon Sep 17 00:00:00 2001 From: Since-future <296779442@qq.com> Date: Tue, 5 Jun 2018 17:07:05 +0800 Subject: [PATCH 091/143] flashtext --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e1d3aea..16a2ae4 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python 实现。 + * flashtext: 一个高效的文本查找替换库。[官网](https://github.com/vi3k6i5/flashtext) * Slug 化 * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) From d6d43527e3c739d97bfc28c6c16fa364ca378526 Mon Sep 17 00:00:00 2001 From: Null <1163916+tangyouhua@users.noreply.github.com> Date: Wed, 6 Jun 2018 09:27:43 +0800 Subject: [PATCH 092/143] add contributor Since-future --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16a2ae4..0c42c75 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future) 注:名单不分排名,不定期补充更新 From 493a81358512dcaac429d946b6a7712a2206dd47 Mon Sep 17 00:00:00 2001 From: knktc Date: Sat, 9 Jun 2018 21:58:25 +0800 Subject: [PATCH 093/143] =?UTF-8?q?=E4=BF=AE=E6=94=B9Ajenti=E7=9A=84?= =?UTF-8?q?=E5=AE=98=E7=BD=91=E5=9C=B0=E5=9D=80=EF=BC=8C=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E5=9C=B0=E5=9D=80=E5=B7=B2=E8=A2=AB=E5=AE=98=E6=96=B9?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=E4=B8=BADEPRECATED?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c42c75..dd7a689 100644 --- a/README.md +++ b/README.md @@ -673,7 +673,7 @@ Python 实现的数据库。 管理界面库。 -* Ajenti:一个你的服务器值得拥有的管理面板。[官网](https://github.com/Eugeny/ajenti) +* Ajenti:一个你的服务器值得拥有的管理面板。[官网](https://github.com/ajenti/ajenti) * django-suit:Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。[官网](http://djangosuit.com/) * django-xadmin:Django admin 的一个替代品,具有很多不错的功能。[官网](https://github.com/sshwsfc/django-xadmin) * flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。[官网](https://github.com/flask-admin/flask-admin) From c7886d881ab3b562d2c7eeac7edb96efaa7db568 Mon Sep 17 00:00:00 2001 From: knktc Date: Sat, 9 Jun 2018 22:03:32 +0800 Subject: [PATCH 094/143] =?UTF-8?q?=E6=B7=BB=E5=8A=A0jsonschema=E7=9A=84?= =?UTF-8?q?=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd7a689..849b413 100644 --- a/README.md +++ b/README.md @@ -654,7 +654,8 @@ Python 实现的数据库。 * schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) * Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) * valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) -* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) +* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) +* jsonschema:[JSON Schema](http://json-schema.org/)的python实现,用于JSON数据的验证。[官网](https://github.com/Julian/jsonschema) ### 反垃圾技术 From a564f314e2b63049d953909fee571dbb4f000982 Mon Sep 17 00:00:00 2001 From: Null <1163916+tangyouhua@users.noreply.github.com> Date: Sun, 10 Jun 2018 07:59:08 +0800 Subject: [PATCH 095/143] add contributor knktc --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 849b413..a37358b 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc) 注:名单不分排名,不定期补充更新 @@ -654,7 +654,7 @@ Python 实现的数据库。 * schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) * Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) * valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) -* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) +* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) * jsonschema:[JSON Schema](http://json-schema.org/)的python实现,用于JSON数据的验证。[官网](https://github.com/Julian/jsonschema) ### 反垃圾技术 From d570a9be08de74ac7d7827f21e60dc1f6e921ae3 Mon Sep 17 00:00:00 2001 From: chenjiandongx Date: Thu, 14 Jun 2018 11:55:18 +0800 Subject: [PATCH 096/143] =?UTF-8?q?Add:=20=E6=96=B0=E5=A2=9E=20asyncio-red?= =?UTF-8?q?is=20=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a37358b..3e1ac09 100644 --- a/README.md +++ b/README.md @@ -365,6 +365,7 @@ Python 实现的数据库。 * dataset:在数据库中存储 Python 字典 * pymssql:一个简单的 Microsoft SQL Server 数据库接口。[官网](http://www.pymssql.org/en/latest/) * NoSQL 数据库 + * asyncio-redis:基于 asyncio 的 redis 客户端 (PEP 3156)。[官网](https://github.com/jonathanslenders/asyncio-redis) * cassandra-python-driver:Cassandra 的 Python 驱动。[官网](https://github.com/datastax/python-driver) * HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。[官网](http://happybase.readthedocs.org/en/latest/) * Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。[官网](https://plyvel.readthedocs.org/en/latest/) @@ -655,7 +656,7 @@ Python 实现的数据库。 * Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) * valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) * voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) -* jsonschema:[JSON Schema](http://json-schema.org/)的python实现,用于JSON数据的验证。[官网](https://github.com/Julian/jsonschema) +* jsonschema:[JSON Schema](http://json-schema.org/)的 python 实现,用于 JSON 数据的验证。[官网](https://github.com/Julian/jsonschema) ### 反垃圾技术 From e65882ecda911dbed5a0c5b4f7b9bdb7c2fec346 Mon Sep 17 00:00:00 2001 From: weizhiwen <763107756@qq.com> Date: Tue, 9 Oct 2018 20:44:58 +0800 Subject: [PATCH 097/143] =?UTF-8?q?=E7=94=B5=E5=AD=90=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20yagmail=20=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3e1ac09..5a74b6d 100644 --- a/README.md +++ b/README.md @@ -572,6 +572,7 @@ Python 实现的数据库。 * modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。[官网](https://github.com/tonioo/modoboa) * pyzmail:创建,发送和解析电子邮件。[官网](http://www.magiksys.net/pyzmail/) * Talon:Mailgun 库,用来抽取信息和签名。[官网](https://github.com/mailgun/talon) +* yagmail:yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。[官网](https://pypi.org/project/yagmail/) ### 国际化 From e0bbf52adbcd4ad1cb2ca016988be4abff797ee6 Mon Sep 17 00:00:00 2001 From: Kip Yin Date: Wed, 12 Dec 2018 21:52:06 +0800 Subject: [PATCH 098/143] Add poetry package manager --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5a74b6d..a49313b 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) * pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) * pipenv:Pyhton 官方推荐的新一代包管理工具。[官网](https://github.com/pypa/pipenv) +* poetry: 可完全取代 setup.py 的包管理工具。[官网](https://poetry.eustace.io) * conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) * Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) * wheel:Python 分发的新标准,意在取代 eggs。[官网](http://pythonwheels.com/) From 558a18914e5fa4b43e2aeb417fbcea6582e0049c Mon Sep 17 00:00:00 2001 From: Gavin-J Date: Tue, 26 Feb 2019 11:12:50 +0800 Subject: [PATCH 099/143] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 资源管理--> File Conveyor 官网地址,原网址失效 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a49313b..900ad44 100644 --- a/README.md +++ b/README.md @@ -539,7 +539,7 @@ Python 实现的数据库。 * django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。[官网](https://github.com/django-compressor/django-compressor) * django-storages:一个针对 Django 的自定义存储后端的工具集合。[官网](http://django-storages.readthedocs.org/en/latest/) * fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。[官网](http://www.fanstatic.org/en/latest/) -* File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。[官网](http://fileconveyor.org/) +* File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。[官网](https://wimleers.com/fileconveyor/) * Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。[官网](http://flask-assets.readthedocs.org/en/latest/) * jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。[官网](https://github.com/jaysonsantos/jinja-assets-compressor) * webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。[官网](http://webassets.readthedocs.org/en/latest/) From efc9301b72a2cde4234bb7c2c87c398f111cf814 Mon Sep 17 00:00:00 2001 From: MLee <31580426+MakingL@users.noreply.github.com> Date: Fri, 15 Mar 2019 21:03:24 +0800 Subject: [PATCH 100/143] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E9=94=99=E7=AC=94?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 900ad44..f66a732 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) * pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) -* pipenv:Pyhton 官方推荐的新一代包管理工具。[官网](https://github.com/pypa/pipenv) +* pipenv:Python 官方推荐的新一代包管理工具。[官网](https://github.com/pypa/pipenv) * poetry: 可完全取代 setup.py 的包管理工具。[官网](https://poetry.eustace.io) * conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) * Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) From 08a8cf3f4dc889326cc0ea162dcc279a708a147e Mon Sep 17 00:00:00 2001 From: my8100 Date: Sat, 23 Mar 2019 17:52:50 +0800 Subject: [PATCH 101/143] Add ScrapydWeb --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f66a732..b00b7c9 100644 --- a/README.md +++ b/README.md @@ -611,6 +611,7 @@ Python 实现的数据库。 爬取网络站点的库 * Scrapy:一个快速高级的屏幕爬取及网页采集框架。[官网](http://scrapy.org/) +* ScrapydWeb:一个用于 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化,自动打包,定时器任务和邮件通知等特色功能。[官网](https://github.com/my8100/scrapydweb) * cola:一个分布式爬虫框架。[官网](https://github.com/chineking/cola) * Demiurge:基于 PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) * feedparser:通用 feed 解析器。[官网](http://pythonhosted.org/feedparser/) From abd65e2bcf8d24dba64da4c12e092981d005a9a3 Mon Sep 17 00:00:00 2001 From: nickle <2330458484@qq.com> Date: Sun, 26 May 2019 15:53:33 +0800 Subject: [PATCH 102/143] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b00b7c9..2dd8a0b 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 打包为可执行文件以便分发。 * PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。[官网](https://github.com/pyinstaller/pyinstaller) +* cx_Freeze:将python程序转换为带有一个动态链接库的可执行文件。[官网](https://cx-freeze.readthedocs.io/en/latest/index.html) * dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。[官网](http://dh-virtualenv.readthedocs.org/) * Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。[官网](http://nuitka.net/) * py2app:将 Python 脚本变为独立软件包(Mac OS X)。[官网](http://pythonhosted.org/py2app/) From 42e95aad481eb2fa6c07bbe6ebc763d0f5948df7 Mon Sep 17 00:00:00 2001 From: nickle <2330458484@qq.com> Date: Mon, 27 May 2019 20:19:25 +0800 Subject: [PATCH 103/143] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2dd8a0b..ac23785 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Vex:可以在虚拟环境中执行命令。[官网](https://github.com/sashahart/vex) * virtualenv:创建独立 Python 环境的工具。[官网](https://pypi.python.org/pypi/virtualenv) * virtualenvwrapper:virtualenv 的一组扩展。[官网](https://pypi.python.org/pypi/virtualenvwrapper) +* buildout:在隔离环境初始化后使用声明性配置管理。[官网](http://www.buildout.org/en/latest) ### 包管理 From 8763b3e85d6a48eb25a26f9884f39ed56b85ceb1 Mon Sep 17 00:00:00 2001 From: nickle <2330458484@qq.com> Date: Mon, 27 May 2019 22:04:27 +0800 Subject: [PATCH 104/143] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ac23785..9cba456 100644 --- a/README.md +++ b/README.md @@ -1110,6 +1110,7 @@ Python 实现的算法和设计模式。 * [algorithms](http://hao.jobbole.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) * python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) * sortedcontainers:快速,纯 Python 实现的 SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) +* Python:使用Python实现的算法大全。[官网](https://github.com/TheAlgorithms/Python) ### 编辑器插件 From f6bb931251785e42330832e05d9860bea41751a1 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 8 Aug 2019 14:58:30 +0800 Subject: [PATCH 105/143] remove pygeoip, add GeoIP2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cba456..ed7b3b6 100644 --- a/README.md +++ b/README.md @@ -327,7 +327,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。[官网](https://github.com/maxmind/geoip-api-python) * geojson:GeoJSON 的 Python 绑定及工具。[官网](https://github.com/frewsxcv/python-geojson) * geopy:Python 地址编码工具箱。[官网](https://github.com/geopy/geopy) -* pygeoip:纯 Python GeoIP API。[官网](https://github.com/appliedsec/pygeoip) +* GeoIP2:GeoIP2 Webservice 客户端与数据库 Python API。[官网](https://github.com/maxmind/GeoIP2-python) * django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。[官网](https://github.com/SmileyChris/django-countries) ### HTTP From b08004882feab5b0e1caad8ae32cd8dec23bebe7 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Thu, 2 Jan 2020 16:03:22 +0800 Subject: [PATCH 106/143] Update README.md --- README.md | 122 +++++++++++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index ed7b3b6..7d21ca0 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 我们要做什么? - 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 -- 整理后的内容,将收录在[伯乐在线资源频道](http://hao.jobbole.com/)。可参考已整理的内容: - - 《[Scrapy:Python 的爬虫框架](http://hao.jobbole.com/python-scrapy/)》 - - 《[Flask:一个使用 Python 编写的轻量级 Web 应用框架](http://hao.jobbole.com/flask/)》 +- 整理后的内容,将收录在[伯乐在线资源频道](http://hao.importnew.com/)。可参考已整理的内容: + - 《[Scrapy:Python 的爬虫框架](http://hao.importnew.com/python-scrapy/)》 + - 《[Flask:一个使用 Python 编写的轻量级 Web 应用框架](http://hao.importnew.com/flask/)》 ### 如何为列表贡献新资源? @@ -30,7 +30,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.jobbole.com/members/huanglimin/)、[atupal](http://www.jobbole.com/members/atupal/)、[rainbow](http://www.jobbole.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.jobbole.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.jobbole.com/members/libing1209/)、[赵叶宇](http://www.jobbole.com/members/nelsonzhao/)、[л stalgic](http://www.jobbole.com/members/fengfeng19910805/)、[硕恩](http://www.jobbole.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.jobbole.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc) 注:名单不分排名,不定期补充更新 @@ -97,7 +97,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 交互式 Python 解析器。 * IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) -* [bpython](http://hao.jobbole.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) +* [bpython](http://hao.importnew.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) * ptpython:高级交互式 Python 解析器, 构建于 [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) ### 文件 @@ -133,7 +133,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用于解析和操作文本的库。 * 通用 - * [chardet](http://hao.jobbole.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) + * [chardet](http://hao.importnew.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) * ftfy:让 Unicode 文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) @@ -175,7 +175,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) - * [xlwt](http://hao.jobbole.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) + * [xlwt](http://hao.importnew.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) * PDF * PDFMiner:一个用于从 PDF 文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) @@ -195,7 +195,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用来处理人类语言的库。 -* [NLTK](http://hao.jobbole.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) +* [NLTK](http://hao.importnew.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) * jieba:中文分词工具。[官网](https://github.com/fxsjy/jieba) * langid.py:独立的语言识别系统。[官网](https://github.com/saffsd/langid.py) * Pattern:Python 网络信息挖掘模块。[官网](http://www.clips.ua.ac.be/pattern) @@ -208,7 +208,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用以生成项目文档的库。 -* [Sphinx](http://hao.jobbole.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) +* [Sphinx](http://hao.importnew.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) * awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) * MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) * pdoc:一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) @@ -240,7 +240,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) * python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。[官网](https://github.com/google/python-fire) - * [Pythonpy](http://hao.jobbole.com/pythonpy/):在命令行中直接执行任何 Python 指令。[官网](https://github.com/Russell91/pythonpy/wiki) + * [Pythonpy](http://hao.importnew.com/pythonpy/):在命令行中直接执行任何 Python 指令。[官网](https://github.com/Russell91/pythonpy/wiki) * 生产力工具 * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) @@ -271,7 +271,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 用来操作图像的库. -* [pillow](http://hao.jobbole.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) +* [pillow](http://hao.importnew.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) * hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) * imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) * nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) @@ -289,7 +289,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 光学字符识别库。 * pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) -* [pytesseract](http://hao.jobbole.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) +* [pytesseract](http://hao.importnew.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) * python-tesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 ### 音频 @@ -300,7 +300,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 * audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) * beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具。[官网](http://beets.io/) * dejavu:音频指纹提取和识别。[官网](https://github.com/worldveil/dejavu) -* [django-elastic-transcoder](http://hao.jobbole.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) +* [django-elastic-transcoder](http://hao.importnew.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) * eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) * id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) * m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) @@ -387,7 +387,7 @@ Python 实现的数据库。 * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 - * [Peewee](http://hao.jobbole.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) + * [Peewee](http://hao.importnew.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) * NoSQL 数据库 @@ -404,18 +404,18 @@ Python 实现的数据库。 全栈 Web 框架。 -* [Django](http://hao.jobbole.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) +* [Django](http://hao.importnew.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) * [awesome-django](https://gitlab.com/rosarior/awesome-django) 系列 -* [Flask](http://hao.jobbole.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) +* [Flask](http://hao.importnew.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) * [awesome-flask](https://github.com/humiaozuzu/awesome-flask) 系列 * pyramid:一个小巧,快速,接地气的开源 Python web 框架。 * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) 系列 -* [Bottle](http://hao.jobbole.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) +* [Bottle](http://hao.importnew.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) * CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。[官网](http://www.cherrypy.org/) * TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) -* [web.py](http://hao.jobbole.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) +* [web.py](http://hao.importnew.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) * web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) -* [Tornado](http://hao.jobbole.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) +* [Tornado](http://hao.importnew.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) * sanic:基于 Python3.5+ 的异步网络框架。[官网](https://github.com/channelcat/sanic/) ### 权限 @@ -439,7 +439,7 @@ Python 实现的数据库。 * Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。[官网](http://opps.github.io/opps/) * Plone:一个构建于开源应用服务器 Zope 之上的 CMS。[官网](https://plone.org/) * Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。[官网](http://quokkaproject.org/) -* [Wagtail](http://hao.jobbole.com/wagtail/):一个 Django 内容管理系统。[官网](https://wagtail.io/) +* [Wagtail](http://hao.importnew.com/wagtail/):一个 Django 内容管理系统。[官网](https://wagtail.io/) * Widgy:最新的 CMS 框架,基于 Django。[官网](https://wid.gy/) ### 电子商务 @@ -460,7 +460,7 @@ Python 实现的数据库。 用来开发 RESTful APIs 的库 * Django - * [django-rest-framework](http://hao.jobbole.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) + * [django-rest-framework](http://hao.importnew.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) * django-tastypie:为 Django 应用开发 API。[官网](http://tastypieapi.org/) * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) * Flask @@ -502,7 +502,7 @@ Python 实现的数据库。 模板生成和词法解析的库和工具。 -* [Jinja2](http://hao.jobbole.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) +* [Jinja2](http://hao.importnew.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) * Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) * Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) * Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) @@ -513,7 +513,7 @@ Python 实现的数据库。 * celery:一个异步任务队列/作业队列,基于分布式消息传递。[官网](http://www.celeryproject.org/) * huey:小型多线程任务队列。[官网](https://github.com/coleifer/huey) -* [mrq](http://hao.jobbole.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) +* [mrq](http://hao.importnew.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) * rq:简单的 Python 作业队列。[官网](http://python-rq.org/) * simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。[官网](https://github.com/rdegges/simpleq) @@ -631,9 +631,9 @@ Python 实现的数据库。 * html2text:将 HTML 转换为 Markdown 格式文本。[官网](https://github.com/Alir3z4/html2text) * lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) * micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) -* [newspaper](http://hao.jobbole.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) +* [newspaper](http://hao.importnew.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) * opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。[官网](https://github.com/erikriver/opengraph) -* [python-goose](http://hao.jobbole.com/python-goose/):HTML 内容/文章提取器。[官网](https://github.com/grangier/python-goose) +* [python-goose](http://hao.importnew.com/python-goose/):HTML 内容/文章提取器。[官网](https://github.com/grangier/python-goose) * python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) * sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) * sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) @@ -723,7 +723,7 @@ Python 实现的数据库。 用于网络编程的库。 * asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) -* [Twisted](http://hao.jobbole.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) +* [Twisted](http://hao.importnew.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) * pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) * diesel:基于 Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) * pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) @@ -745,7 +745,7 @@ Python 实现的数据库。 * gunicorn:Pre-forked, 部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/gunicorn) * uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。[官网](https://uwsgi-docs.readthedocs.org/en/latest/) -* [bjoern](http://hao.jobbole.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) +* [bjoern](http://hao.importnew.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) * fapws3:异步 (仅对于网络端),由 C 语言编写。[官网](http://www.fapws.org/) * meinheld:异步,部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/meinheld) * netius:异步,非常快速。[官网](https://github.com/hivesolutions/netius) @@ -777,7 +777,7 @@ Python 实现的数据库。 * curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) * enaml:使用类似 QML 的 Declaratic 语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) -* [kivy](http://hao.jobbole.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。[官网](https://kivy.org/) +* [kivy](http://hao.importnew.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。[官网](https://kivy.org/) * pyglet:一个 Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) * PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) * PySide:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。[官网](https://wiki.qt.io/PySide) @@ -886,7 +886,7 @@ Python 实现的数据库。 * flask-debugtoolbar:django-debug-toolbar 的 flask 版。[官网](https://github.com/mgood/flask-debugtoolbar) * 性能分析器 * lineprofiler:逐行性能分析。[官网](https://github.com/rkern/lineprofiler) - * [Memory Profiler](http://hao.jobbole.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) + * [Memory Profiler](http://hao.importnew.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) * profiling:一个交互式 Python 性能分析工具。[官网](https://github.com/what-studio/profiling) * 其他 * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) @@ -897,27 +897,27 @@ Python 实现的数据库。 用来进行科学计算和数据分析的库。 * astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) -* [bcbio-nextgen](http://hao.jobbole.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) +* [bcbio-nextgen](http://hao.importnew.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) * bccb:生物分析相关代码集合。[官网](https://github.com/chapmanb/bcbb) * Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) -* [blaze](http://hao.jobbole.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) -* [cclib](http://hao.jobbole.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) +* [blaze](http://hao.importnew.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) +* [cclib](http://hao.importnew.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) * NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) * Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) * Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) -* [NumPy](http://hao.jobbole.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) +* [NumPy](http://hao.importnew.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) * Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) -* [Open Mining](http://hao.jobbole.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) -* [orange](http://hao.jobbole.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) +* [Open Mining](http://hao.importnew.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) +* [orange](http://hao.importnew.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) * Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) * PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) -* [PyMC](http://hao.jobbole.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) +* [PyMC](http://hao.importnew.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) * RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) -* [SciPy](http://hao.jobbole.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) -* [statsmodels](http://hao.jobbole.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) +* [SciPy](http://hao.importnew.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) +* [statsmodels](http://hao.importnew.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) * SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) * zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) -* [Bayesian-belief-networks](http://hao.jobbole.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) +* [Bayesian-belief-networks](http://hao.importnew.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) ### 数据可视化 @@ -942,7 +942,7 @@ Python 实现的数据库。 * OpenCV:开源计算机视觉库。[官网](http://opencv.org/) * pyocr:Tesseract 和 Cuneiform 的包装库。[官网](https://github.com/jflesch/pyocr) * pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。[官网](https://github.com/madmaze/pytesseract) -* [SimpleCV](http://hao.jobbole.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) +* [SimpleCV](http://hao.importnew.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) ### 机器学习 @@ -957,10 +957,10 @@ Python 实现的数据库。 * [MXNet](https://github.com/apache/incubator-mxnet):一个高效和灵活的深度学习框架。[官网](http://mxnet.incubator.apache.org/) * NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) * pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) -* [PyBrain](http://hao.jobbole.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) +* [PyBrain](http://hao.importnew.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) * pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) -* [Pylearn2](http://hao.jobbole.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) -* [python-recsys](http://hao.jobbole.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) +* [Pylearn2](http://hao.importnew.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) +* [python-recsys](http://hao.importnew.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) * [Pytorch](https://github.com/pytorch/pytorch):一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。[官网](http://pytorch.org/) * scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) * skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) @@ -972,7 +972,7 @@ Python 实现的数据库。 MapReduce 框架和库。 -* [dpark](http://hao.jobbole.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) +* [dpark](http://hao.importnew.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) * dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。[官网](https://github.com/klbostee/dumbo) * luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) * mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) @@ -1040,7 +1040,7 @@ MapReduce 框架和库。 使用外来函数接口的库。 * cffi:用来调用 C 代码的外来函数接口。[官网](https://pypi.python.org/pypi/cffi) -* [ctypes](http://hao.jobbole.com/ctypes/):(Python 标准库) 用来调用 C 代码的外来函数接口。[官网](https://docs.python.org/2/library/ctypes.html) +* [ctypes](http://hao.importnew.com/ctypes/):(Python 标准库) 用来调用 C 代码的外来函数接口。[官网](https://docs.python.org/2/library/ctypes.html) * PyCUDA:Nvidia CUDA API 的封装。[官网](https://mathema.tician.de/software/pycuda/) * SWIG:简化的封装和接口生成器。[官网](http://www.swig.org/Doc1.3/Python.html) @@ -1051,7 +1051,7 @@ MapReduce 框架和库。 * Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。[官网](http://cython.org/) * PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。[官网](https://github.com/Maratyszcza/PeachPy) * PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。[官网](http://pypy.org/) -* [Pyston](http://hao.jobbole.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) +* [Pyston](http://hao.importnew.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) * Stackless Python:一个强化版的 Python。[官网](https://bitbucket.org/stackless-dev/stackless/overview) ### 微软的 Windows 平台 @@ -1101,13 +1101,13 @@ MapReduce 框架和库。 * itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) * pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) * Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) -* [Tryton](http://hao.jobbole.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) +* [Tryton](http://hao.importnew.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) ### 算法和设计模式 Python 实现的算法和设计模式。 -* [algorithms](http://hao.jobbole.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) +* [algorithms](http://hao.importnew.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) * python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) * sortedcontainers:快速,纯 Python 实现的 SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) * Python:使用Python实现的算法大全。[官网](https://github.com/TheAlgorithms/Python) @@ -1122,7 +1122,7 @@ Python 实现的算法和设计模式。 * SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。[官网](https://github.com/srusskih/SublimeJEDI) * Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。[官网](https://github.com/DamnWidget/anaconda) * Vim - * [YouCompleteMe](http://hao.jobbole.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) + * [YouCompleteMe](http://hao.importnew.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) * Visual Studio @@ -1198,16 +1198,16 @@ Python 实现的算法和设计模式。 * [@PythonWeekly](https://twitter.com/PythonWeekly) ### 学习指南 -* [Scipy-lecture-notes](http://hao.jobbole.com/scipy-lecture-notes/):如何用 Python 来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) -* [SScientific-python-lectures](http://hao.jobbole.com/scientific-python-lectures/):Python 科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) -* [Mario-Level-1](http://hao.jobbole.com/mario-level-1/):用 Python 和 Pygame 写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) -* [Python Koans](http://hao.jobbole.com/python-koans/):Python 的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) -* [Minecraft](http://hao.jobbole.com/minecraft-python/):用 python 写的 Minecraft 游戏。[官网](https://github.com/fogleman/Minecraft) -* [pycrumbs](http://hao.jobbole.com/python-pycrumbs/):Python 资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) -* [python-patterns](http://hao.jobbole.com/python-patterns/):使用 python 实现设计模式。[官网](https://github.com/faif/python-patterns) -* [Projects](http://hao.jobbole.com/python-projects/):Python 项目大集合。[官网](https://github.com/karan/Projects) -* [The Hitchhiker’s Guide to Python](http://hao.jobbole.com/the-hitchhikers-guide-to-python/):旅行者的 Python 学习指南。[官网](http://docs.python-guide.org/en/latest/) -* [Code Like a Pythonista: Idiomatic Python](http://top.jobbole.com/18767/):如何像 Python 高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html) +* [Scipy-lecture-notes](http://hao.importnew.com/scipy-lecture-notes/):如何用 Python 来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) +* [SScientific-python-lectures](http://hao.importnew.com/scientific-python-lectures/):Python 科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) +* [Mario-Level-1](http://hao.importnew.com/mario-level-1/):用 Python 和 Pygame 写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) +* [Python Koans](http://hao.importnew.com/python-koans/):Python 的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) +* [Minecraft](http://hao.importnew.com/minecraft-python/):用 python 写的 Minecraft 游戏。[官网](https://github.com/fogleman/Minecraft) +* [pycrumbs](http://hao.importnew.com/python-pycrumbs/):Python 资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) +* [python-patterns](http://hao.importnew.com/python-patterns/):使用 python 实现设计模式。[官网](https://github.com/faif/python-patterns) +* [Projects](http://hao.importnew.com/python-projects/):Python 项目大集合。[官网](https://github.com/karan/Projects) +* [The Hitchhiker’s Guide to Python](http://hao.importnew.com/the-hitchhikers-guide-to-python/):旅行者的 Python 学习指南。[官网](http://docs.python-guide.org/en/latest/) +* [Code Like a Pythonista: Idiomatic Python](http://top.importnew.com/18767/):如何像 Python 高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html)

知名网站

@@ -1215,11 +1215,11 @@ Python 实现的算法和设计模式。

中文站点

-* 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。[官网](http://python.jobbole.com/) +* 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。[官网](http://python.importnew.com/)

英文站点

-* 《[值得关注的 10 个 Python 英文博客](http://python.jobbole.com/81730/)》 +* 《[值得关注的 10 个 Python 英文博客](http://python.importnew.com/81730/)》

微博、微信公众号

From 602ae763daba0cd6e77b1452bf15f4781e79ae64 Mon Sep 17 00:00:00 2001 From: peng Date: Mon, 11 May 2020 22:19:37 +0800 Subject: [PATCH 107/143] add new frame->starlette --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7d21ca0..08b1c3d 100644 --- a/README.md +++ b/README.md @@ -417,6 +417,7 @@ Python 实现的数据库。 * web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) * [Tornado](http://hao.importnew.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) * sanic:基于 Python3.5+ 的异步网络框架。[官网](https://github.com/channelcat/sanic/) +* starlette: 一款轻量级,高性能的 ASGI 框架 🌟。 [官网](https://www.starlette.io/) ### 权限 From fa2c8d00f0ada10d8a768fb1899abb4580819f69 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Mon, 11 May 2020 23:17:04 +0800 Subject: [PATCH 108/143] add contributor zhucebuliaopx --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 08b1c3d..7f138ba 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx) 注:名单不分排名,不定期补充更新 From 1ee8f1e9ef7d9f87b74ffa346ebd65c732389353 Mon Sep 17 00:00:00 2001 From: wardseptember Date: Sun, 21 Jun 2020 13:36:37 +0800 Subject: [PATCH 109/143] update: goose3 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f138ba..3307756 100644 --- a/README.md +++ b/README.md @@ -634,7 +634,8 @@ Python 实现的数据库。 * micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) * [newspaper](http://hao.importnew.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) * opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。[官网](https://github.com/erikriver/opengraph) -* [python-goose](http://hao.importnew.com/python-goose/):HTML 内容/文章提取器。[官网](https://github.com/grangier/python-goose) +* [python-goose](http://hao.importnew.com/python-goose/):HTML 内容/文章提取器(python2)。[官网](https://github.com/grangier/python-goose) +* [goose3](https://github.com/goose3/goose3): HTML 内容/文章提取器(python3)。[官网](http://goose3.readthedocs.io/en/latest/index.html) * python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) * sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) * sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) From ebb896bd41135870d02fdb70526ee1bf66a842d5 Mon Sep 17 00:00:00 2001 From: wardseptember Date: Sun, 21 Jun 2020 13:41:29 +0800 Subject: [PATCH 110/143] update: goose3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3307756..1887862 100644 --- a/README.md +++ b/README.md @@ -635,7 +635,7 @@ Python 实现的数据库。 * [newspaper](http://hao.importnew.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) * opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。[官网](https://github.com/erikriver/opengraph) * [python-goose](http://hao.importnew.com/python-goose/):HTML 内容/文章提取器(python2)。[官网](https://github.com/grangier/python-goose) -* [goose3](https://github.com/goose3/goose3): HTML 内容/文章提取器(python3)。[官网](http://goose3.readthedocs.io/en/latest/index.html) +* [goose3](http://goose3.readthedocs.io/en/latest/index.html): HTML 内容/文章提取器(python3)。[官网](https://github.com/goose3/goose3) * python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) * sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) * sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) From 4fdf5fabf6a770cef75ed8298767cc0d634c0062 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Tue, 23 Jun 2020 20:10:35 +0800 Subject: [PATCH 111/143] add contributor wardseptember --- README.md | 132 +----------------------------------------------------- 1 file changed, 2 insertions(+), 130 deletions(-) diff --git a/README.md b/README.md index 1887862..b59e4c9 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 本项目的参与者 - 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx) +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 @@ -1099,132 +1099,4 @@ MapReduce 框架和库。 不属于上面任何一个类别,但是非常有用的库。 -* blinker:一个快速的 Python 进程内信号/事件分发系统。[官网](https://github.com/jek/blinker) -* itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。[官网](https://github.com/pallets/itsdangerous) -* pluginbase:一个简单但是非常灵活的 Python 插件系统。[官网](https://github.com/mitsuhiko/pluginbase) -* Pychievements:一个用来创建和追踪成就的 Python 框架。[官网](https://github.com/PacketPerception/pychievements) -* [Tryton](http://hao.importnew.com/tryton/):一个通用商务框架。[官网](http://www.tryton.org/) - -### 算法和设计模式 - -Python 实现的算法和设计模式。 - -* [algorithms](http://hao.importnew.com/algorithms/):一个 Python 算法模块。[官网](https://github.com/nryoung/algorithms) -* python-patterns:Python 设计模式的集合。[官网](https://github.com/faif/python-patterns) -* sortedcontainers:快速,纯 Python 实现的 SortedList,SortedDict 和 SortedSet 类型。[官网](http://www.grantjenks.com/docs/sortedcontainers/) -* Python:使用Python实现的算法大全。[官网](https://github.com/TheAlgorithms/Python) - -### 编辑器插件 - -编辑器和 IDE 的插件 - -* Emacs - * Elpy:Emacs Python 开发环境。[官网](https://github.com/jorgenschaefer/elpy) -* Sublime Text - * SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。[官网](https://github.com/srusskih/SublimeJEDI) - * Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。[官网](https://github.com/DamnWidget/anaconda) -* Vim - * [YouCompleteMe](http://hao.importnew.com/youcompleteme/):引入基于 [Jedi](https://github.com/davidhalter/jedi) 的 Python 自动补全引擎。[官网](https://github.com/Valloric/YouCompleteMe) - * Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。[官网](https://github.com/davidhalter/jedi-vim) - * Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。[官网](https://github.com/klen/python-mode) -* Visual Studio - * PTVS:Visual Studio 的 Python 工具。[官网](https://github.com/Microsoft/PTVS) - -### 集成开发环境 - -流行的 Python 集成开发环境。 - -* PyCharm:商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。[官网](https://www.jetbrains.com/pycharm/) -* LiClipse:基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。[官网](http://www.liclipse.com/) -* Spyder:开源 Python IDE。[官网](https://github.com/spyder-ide/spyder) - -### 自动聊天工具 - -用于开发聊天机器人的库 - -*   Errbot:最简单和最流行的聊天机器人用来实现自动聊天工具。[官网](http://errbot.io/en/latest/) - -## 服务 - -在线工具和简化开发的 API 。 - -### 金融数据 - -* Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的 Python 开源数据。[官网](http://tushare.org) -* Ta-Lib :金融数据技术分析库,可以依据原始金融数据计算各种技术指标,计算性能比较优异。[官网](https://www.ta-lib.org/) - -### 持续集成 - -参见: [awesome-CIandCD](https://github.com/ciandcd/awesome-ciandcd#online-build-system). - -* Travis CI:一个流行的工具,为你的开源和 [私人](https://travis-ci.com/) 项目提供持续集成服务。(仅支持 GitHub)[官网](https://travis-ci.org/) -* CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)[官网](https://circleci.com/) -* Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。[官网](https://vexor.io/) -* Wercker:基于 Docker 平台,用来构建和部署微服务。[官网](http://wercker.com/) - -### 代码质量 - -* Codacy:自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。[官网](https://www.codacy.com/) -* QuantifiedCode:一个数据驱动、自动、持续的代码审查工具。[官网](https://www.quantifiedcode.com/) - -## 资源 - -在这里可以找到新的 Python 库。 - -### 网站 - -* [r/Python](https://www.reddit.com/r/python) -* [CoolGithubProjects](https://www.coolgithubprojects.com/) -* [Django Packages](https://www.djangopackages.com/) -* [Full Stack Python](http://www.fullstackpython.com/) -* [Python 3 Wall of Superpowers](http://python3wos.appspot.com/) -* [Python Hackers](http://pythonhackers.com/open-source/) -* [Python ZEEF](https://python.zeef.com/alan.richmond) -* [Trending Python repositories on GitHub today](https://github.com/trending?l=python) -* [PyPI Ranking](http://pypi-ranking.info/alltime) - -### 周刊 - -* [Import Python Newsletter](http://importpython.com/newsletter/) -* [Pycoder's Weekly](http://pycoders.com/) -* [Python Weekly](http://www.pythonweekly.com/) - -### Twitter - -* [@codetengu](https://twitter.com/codetengu) -* [@getpy](https://twitter.com/getpy) -* [@planetpython](https://twitter.com/planetpython) -* [@pycoders](https://twitter.com/pycoders) -* [@pypi](https://twitter.com/pypi) -* [@pythontrending](https://twitter.com/pythontrending) -* [@PythonWeekly](https://twitter.com/PythonWeekly) - -### 学习指南 -* [Scipy-lecture-notes](http://hao.importnew.com/scipy-lecture-notes/):如何用 Python 来做学术?[官网](https://github.com/scipy-lectures/scipy-lecture-notes) -* [SScientific-python-lectures](http://hao.importnew.com/scientific-python-lectures/):Python 科学计算的资料。[官网](https://github.com/jrjohansson/scientific-python-lectures) -* [Mario-Level-1](http://hao.importnew.com/mario-level-1/):用 Python 和 Pygame 写的超级马里奥第一关。[官网](https://github.com/justinmeister/Mario-Level-1) -* [Python Koans](http://hao.importnew.com/python-koans/):Python 的交互式学习工具。[官网](https://github.com/gregmalcolm/python_koans) -* [Minecraft](http://hao.importnew.com/minecraft-python/):用 python 写的 Minecraft 游戏。[官网](https://github.com/fogleman/Minecraft) -* [pycrumbs](http://hao.importnew.com/python-pycrumbs/):Python 资源大全。[官网](https://github.com/kirang89/pycrumbs/blob/master/pycrumbs.md) -* [python-patterns](http://hao.importnew.com/python-patterns/):使用 python 实现设计模式。[官网](https://github.com/faif/python-patterns) -* [Projects](http://hao.importnew.com/python-projects/):Python 项目大集合。[官网](https://github.com/karan/Projects) -* [The Hitchhiker’s Guide to Python](http://hao.importnew.com/the-hitchhikers-guide-to-python/):旅行者的 Python 学习指南。[官网](http://docs.python-guide.org/en/latest/) -* [Code Like a Pythonista: Idiomatic Python](http://top.importnew.com/18767/):如何像 Python 高手(Pythonista)一样编程。[官网](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html) - -

知名网站

- -*值得关注的 Python 技术站点。* - -

中文站点

- -* 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。[官网](http://python.importnew.com/) - -

英文站点

- -* 《[值得关注的 10 个 Python 英文博客](http://python.importnew.com/81730/)》 - -

微博、微信公众号

- -* Python开发者 微博:[@Python开发者](http://weibo.com/u/5305630013) -* Python开发者:人生苦短,我用 Python。Python 越来越受广大程序员的喜爱。「Python开发者」是最受欢迎的、专注分享 Python 技术的微信公众号,主要分享 Python 相关的技术文章、工具资源和资讯等。 -
+* blinker From cb552812b7e523948ac346c3a25db816271c87ec Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 14:04:39 +0800 Subject: [PATCH 112/143] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E7=89=88=EF=BC=8C=E8=BF=BD=E5=8A=A0=E6=96=B0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1703 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 1021 insertions(+), 682 deletions(-) diff --git a/README.md b/README.md index b59e4c9..795ab61 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # Python 资源大全中文版 -我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。 - -Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。这也是我们发起这个开源项目的初衷。 +我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨」和「Python开发者」微信公号维护更新。 ## 关于项目 @@ -10,1093 +8,1434 @@ Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的 ### 我们要做什么? - 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 -- 整理后的内容,将收录在[伯乐在线资源频道](http://hao.importnew.com/)。可参考已整理的内容: - - 《[Scrapy:Python 的爬虫框架](http://hao.importnew.com/python-scrapy/)》 - - 《[Flask:一个使用 Python 编写的轻量级 Web 应用框架](http://hao.importnew.com/flask/)》 - - -### 如何为列表贡献新资源? - -欢迎大家为列表贡献高质量的新资源,提交 PR 时请参照以下要求: - -* 请确保推荐的资源自己使用过 -* 提交 PR 时请注明推荐理由 - -资源列表管理收到 PR 请求后,会定期(每周)在微博转发本周提交的 PR 列表,并在微博上面听取使用过这些资源的意见。确认通过后,会加入资源大全。 - -感谢您的贡献! - ### 本项目的参与者 -- 维护者: -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、[黄利民](http://www.importnew.com/members/huanglimin/)、[atupal](http://www.importnew.com/members/atupal/)、[rainbow](http://www.importnew.com/members/rainbow/)、[木头lbj](https://github.com/mutoulbj)、[beyondwu](http://www.importnew.com/members/beyondwu/)、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、[冰斌](http://www.importnew.com/members/libing1209/)、[赵叶宇](http://www.importnew.com/members/nelsonzhao/)、[л stalgic](http://www.importnew.com/members/fengfeng19910805/)、[硕恩](http://www.importnew.com/members/shawnw/)、[strongit](https://github.com/strongit)、[yuukilp](http://www.importnew.com/members/yuukilp/)、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) +- 维护者:「开源前哨」和「Python开发者」微信公号 +- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 - ## 资源列表 ### 环境管理 管理 Python 版本和环境的工具 -* p:非常简单的交互式 python 版本管理工具。[官网](https://github.com/qw3rtman/p) -* pyenv:简单的 Python 版本管理工具。[官网](https://github.com/yyuu/pyenv) -* Vex:可以在虚拟环境中执行命令。[官网](https://github.com/sashahart/vex) -* virtualenv:创建独立 Python 环境的工具。[官网](https://pypi.python.org/pypi/virtualenv) -* virtualenvwrapper:virtualenv 的一组扩展。[官网](https://pypi.python.org/pypi/virtualenvwrapper) -* buildout:在隔离环境初始化后使用声明性配置管理。[官网](http://www.buildout.org/en/latest) +* [p](https://github.com/qw3rtman/p):非常简单的交互式 python 版本管理工具。 +* [pyenv](https://github.com/yyuu/pyenv):简单的 Python 版本管理工具。 +* [Vex](https://github.com/sashahart/vex):可以在虚拟环境中执行命令。 +* [virtualenv](https://pypi.python.org/pypi/virtualenv):创建独立 Python 环境的工具。 +* [virtualenvwrapper](https://pypi.python.org/pypi/virtualenvwrapper):virtualenv 的一组扩展。 +* [buildout](http://www.buildout.org/en/latest):在隔离环境初始化后使用声明性配置管理。 ### 包管理 管理包和依赖的工具。 -* pip:Python 包和依赖关系管理工具。[官网](https://pip.pypa.io/) -* pip-tools:保证 Python 包依赖关系更新的一组工具。[官网](https://github.com/nvie/pip-tools) -* pipenv:Python 官方推荐的新一代包管理工具。[官网](https://github.com/pypa/pipenv) -* poetry: 可完全取代 setup.py 的包管理工具。[官网](https://poetry.eustace.io) -* conda:跨平台,Python 二进制包管理工具。[官网](https://github.com/conda/conda/) -* Curdling:管理 Python 包的命令行工具。[官网](http://clarete.li/curdling/) -* wheel:Python 分发的新标准,意在取代 eggs。[官网](http://pythonwheels.com/) +* [pip](https://pip.pypa.io/):Python 包和依赖关系管理工具。 +* [pip-tools](https://github.com/nvie/pip-tools):保证 Python 包依赖关系更新的一组工具。 +* [PyPI](https://pypi.org/):Python 正式的第三方包软件存储库。 +* [pipenv](https://github.com/pypa/pipenv):Python 官方推荐的新一代包管理工具。 +* [poetry](https://poetry.eustace.io):可完全取代 setup.py 的包管理工具。 +* [conda](https://github.com/conda/conda/):跨平台的 Python 二进制包管理工具。 +* [Curdling](http://clarete.li/curdling/):管理 Python 包的命令行工具。 +* [wheel](http://pythonwheels.com/):Python 分发的新标准,意在取代 eggs。 ### 包仓库 本地 PyPI 仓库服务和代理。 -* [warehouse](https://pypi.org/):下一代 PyPI。[官网](https://github.com/pypa/warehouse) -* bandersnatch:PyPA 提供的 PyPI 镜像工具。[官网](https://bitbucket.org/pypa/bandersnatch) -* devpi:PyPI 服务和打包/测试/分发工具。[官网](http://doc.devpi.net/) -* localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。[官网](https://github.com/mvantellingen/localshop) +* [warehouse](https://github.com/pypa/warehouse):下一代 PyPI。 +* [bandersnatch](https://bitbucket.org/pypa/bandersnatch):PyPA 提供的 PyPI 镜像工具。 +* [devpi](http://doc.devpi.net/):PyPI 服务和打包/测试/分发工具。 +* [localshop](https://github.com/mvantellingen/localshop):本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。 ### 分发 打包为可执行文件以便分发。 -* PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。[官网](https://github.com/pyinstaller/pyinstaller) -* cx_Freeze:将python程序转换为带有一个动态链接库的可执行文件。[官网](https://cx-freeze.readthedocs.io/en/latest/index.html) -* dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。[官网](http://dh-virtualenv.readthedocs.org/) -* Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。[官网](http://nuitka.net/) -* py2app:将 Python 脚本变为独立软件包(Mac OS X)。[官网](http://pythonhosted.org/py2app/) -* py2exe:将 Python 脚本变为独立软件包(Windows)。[官网](http://www.py2exe.org/) -* pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。[官网](http://pynsist.readthedocs.org/) +* [PyInstaller](https://github.com/pyinstaller/pyinstaller):将 Python 程序转换成独立的执行文件(跨平台)。 +* [cx_Freeze](https://cx-freeze.readthedocs.io/en/latest/index.html):将python程序转换为带有一个动态链接库的可执行文件。 +* [dh-virtualenv](http://dh-virtualenv.readthedocs.org/):构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。 +* [Nuitka](http://nuitka.net/):将脚本、模块、包编译成可执行文件或扩展模块。 +* [py2app](http://pythonhosted.org/py2app/):将 Python 脚本变为独立软件包(Mac OS X)。 +* [py2exe](http://www.py2exe.org/):将 Python 脚本变为独立软件包(Windows)。 +* [pynsist](http://pynsist.readthedocs.org/):一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python 本身。 +* [pyarmor](https://github.com/dashingsoft/pyarmor):一个用于加密 python 脚本的工具,也可以将加密后的脚本绑定到固件上,或设置已加密脚本的有效期。 +* [shiv](https://github.com/linkedin/shiv):一个命令行工具,可用于构建完全独立的 zip 应用(PEP 441 所描述的那种),同时包含了所有的依赖项。 ### 构建工具 将源码编译成软件。 -* buildout:一个构建系统,从多个组件来创建,组装和部署应用。[官网](http://www.buildout.org/) -* BitBake:针对嵌入式 Linux 的类似 make 的构建工具。[官网](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html) -* fabricate:对任何语言自动找到依赖关系的构建工具。[官网](https://code.google.com/archive/p/fabricate) -* PlatformIO:多平台命令行构建工具。[官网](https://github.com/platformio/platformio) -* PyBuilder:纯 Python 实现的持续化构建工具。[官网](https://github.com/pybuilder/pybuilder) -* SCons:软件构建工具。[官网](http://www.scons.org/) +* [buildout](http://www.buildout.org/):一个构建系统,从多个组件来创建,组装和部署应用。 +* [BitBake](http://www.yoctoproject.org/docs/1.6/bitbake-user-manual/bitbake-user-manual.html):针对嵌入式 Linux 的类似 make 的构建工具。 +* [fabricate](https://code.google.com/archive/p/fabricate):对任何语言自动找到依赖关系的构建工具。 +* [PlatformIO](https://github.com/platformio/platformio):多平台命令行构建工具。 +* [PyBuilder](https://github.com/pybuilder/pybuilder):纯 Python 实现的持续化构建工具。 +* [SCons](http://www.scons.org/):软件构建工具。 ### 交互式解析器 交互式 Python 解析器。 -* IPython:功能丰富的工具,非常有效的使用交互式 Python。[官网](https://github.com/ipython/ipython) -* [bpython](http://hao.importnew.com/bpython/):界面丰富的 Python 解析器。[官网](http://bpython-interpreter.org/) -* ptpython:高级交互式 Python 解析器, 构建于 [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。[官网](https://github.com/jonathanslenders/ptpython) +* [IPython](https://github.com/ipython/ipython):功能丰富的工具,非常有效的使用交互式 Python。 +* [bpython](https://github.com/bpython/bpython):界面丰富的 Python 解析器。 +* [ptpython](https://github.com/jonathanslenders/ptpython):高级交互式 Python 解析器, 构建于 [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit) 之上。 +* [Jupyter Notebook (IPython)](https://jupyter.org):一个能够让你最大限度地以交互式方式使用 Python 的丰富工具包。 + * [awesome-jupyter](https://github.com/markusschanta/awesome-jupyter) ### 文件 文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 -* aiofiles:基于 asyncio,提供文件异步操作。[官网](https://github.com/Tinche/aiofiles) -* imghdr:(Python 标准库)检测图片类型。[官网](https://docs.python.org/2/library/imghdr.html) -* mimetypes:(Python 标准库)将文件名映射为 MIME 类型。[官网](https://docs.python.org/2/library/mimetypes.html) -* path.py:对 os.path 进行封装的模块。[官网](https://github.com/jaraco/path.py) -* pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。[官网](https://pathlib.readthedocs.org/en/pep428/) -* python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。[官网](https://github.com/ahupp/python-magic) -* Unipath:用面向对象的方式操作文件和目录。[官网](https://github.com/mikeorr/Unipath) -* watchdog:管理文件系统事件的 API 和 shell 工具。[官网](https://github.com/gorakhargosh/watchdog) +* [aiofiles](https://github.com/Tinche/aiofiles):基于 asyncio,提供文件异步操作。 +* [imghdr](https://docs.python.org/2/library/imghdr.html):(Python 标准库)检测图片类型。 +* [mimetypes](https://docs.python.org/2/library/mimetypes.html):(Python 标准库)将文件名映射为 MIME 类型。 +* [path.py](https://github.com/jaraco/path.py):对 os.path 进行封装的模块。 +* [pathlib](https://pathlib.readthedocs.org/en/pep428/):(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。 +* [python-magic](https://github.com/ahupp/python-magic):文件类型检测的第三方库 libmagic 的 Python 接口。 +* [Unipath](https://github.com/mikeorr/Unipath):用面向对象的方式操作文件和目录。 +* [watchdog](https://github.com/gorakhargosh/watchdog):管理文件系统事件的 API 和 shell 工具。 +* [PyFilesystem2](https://github.com/pyfilesystem/pyfilesystem2):Python 的文件系统抽象层。 ### 日期和时间 操作日期和时间的类库。 -* arrow:更好的 Python 日期时间操作类库。[官网](https://github.com/crsmithdev/arrow) -* Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。[官网](https://github.com/KoffeinFlummi/Chronyk) -* dateutil:Python datetime 模块的扩展。[官网](https://pypi.python.org/pypi/python-dateutil) -* delorean:解决 Python 中有关日期处理的棘手问题的库。[官网](https://github.com/myusuf3/delorean/) -* maya:人性化的时间处理库。[官网](https://github.com/kennethreitz/maya) -* moment:一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。[官网](https://github.com/zachwill/moment) -* pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。[官网](https://github.com/sdispater/pendulum) -* PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。[官网](https://github.com/shinux/PyTime) -* pytz:现代以及历史版本的世界时区定义。将时区数据库引入 Python。[官网](https://launchpad.net/pytz) -* when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。[官网](https://github.com/dirn/When.py) +* [arrow](https://github.com/crsmithdev/arrow):更好的 Python 日期时间操作类库。 +* [Chronyk](https://github.com/KoffeinFlummi/Chronyk):Python 3 的类库,用于解析手写格式的时间和日期。 +* [dateutil](https://pypi.python.org/pypi/python-dateutil):Python datetime 模块的扩展。 +* [delorean](https://github.com/myusuf3/delorean/):解决 Python 中有关日期处理的棘手问题的库。 +* [maya](https://github.com/kennethreitz/maya):人性化的时间处理库。 +* [moment](https://github.com/zachwill/moment):一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。 +* [pendulum](https://github.com/sdispater/pendulum):一个比 arrow 更具有明确的,可预测的行为的时间操作库。 +* [PyTime](https://github.com/shinux/PyTime):一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。 +* [pytz](https://launchpad.net/pytz):现代以及历史版本的世界时区定义。将时区数据库引入 Python。 +* [when.py](https://github.com/dirn/When.py):提供用户友好的函数来帮助用户进行常用的日期和时间操作。 +* [dateutil](https://github.com/dateutil/dateutil):Python 标准包 [datetime](https://docs.python.org/3/library/datetime.html) 的扩展。 +* [moment](https://github.com/zachwill/moment):一个处理日期/时间的库,灵感来自 [Moment.js](http://momentjs.com/)。 +* [pytz](https://launchpad.net/pytz):支持跨平台时区计算,并将 [tz database](https://en.wikipedia.org/wiki/Tz_database) 引入 Python。 ### 文本处理 用于解析和操作文本的库。 * 通用 - * [chardet](http://hao.importnew.com/chardet/):字符编码检测器,兼容 Python2 和 Python3。[官网](https://github.com/chardet/chardet) - * difflib:(Python 标准库)帮助我们进行差异化比较。[官网](https://docs.python.org/2/library/difflib.html) - * ftfy:让 Unicode 文本更完整更连贯。[官网](https://github.com/LuminosoInsight/python-ftfy) - * fuzzywuzzy:模糊字符串匹配。[官网](https://github.com/seatgeek/fuzzywuzzy) - * Levenshtein:快速计算编辑距离以及字符串的相似度。[官网](https://github.com/ztane/python-Levenshtein/) - * pangu.py:在中日韩语字符和数字字母之间添加空格。[官网](https://github.com/vinta/pangu.py) - * pypinyin:汉字拼音转换工具 Python 版。[官网](https://github.com/mozillazg/python-pinyin) - * shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。[官网](https://github.com/stochastic-technologies/shortuuid) - * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。[官网](https://simplejson.readthedocs.io/en/latest/) - * unidecode:Unicode 文本的 ASCII 转换形式 。[官网](https://pypi.python.org/pypi/Unidecode) - * uniout:打印可读的字符,而不是转义的字符串。[官网](https://github.com/moskytw/uniout) - * xpinyin:一个用于把汉字转换为拼音的库。[官网](https://github.com/lxneng/xpinyin) - * yfiglet-figlet:[pyfiglet -figlet](https://github.com/pwaller/pyfiglet) 的 Python 实现。 - * flashtext: 一个高效的文本查找替换库。[官网](https://github.com/vi3k6i5/flashtext) + * [chardet](https://github.com/chardet/chardet):字符编码检测器,兼容 Python2 和 Python3。 + * [difflib](https://docs.python.org/2/library/difflib.html):(Python 标准库)帮助我们进行差异化比较。 + * [ftfy](https://github.com/LuminosoInsight/python-ftfy):让 Unicode 文本更完整更连贯。 + * [fuzzywuzzy](https://github.com/seatgeek/fuzzywuzzy):模糊字符串匹配。 + * [Levenshtein](https://github.com/ztane/python-Levenshtein/):快速计算编辑距离以及字符串的相似度。 + * [pangu.py](https://github.com/vinta/pangu.py):在中日韩语字符和数字字母之间添加空格。 + * [pypinyin](https://github.com/mozillazg/python-pinyin):汉字拼音转换工具 Python 版。 + * [shortuuid](https://github.com/stochastic-technologies/shortuuid):一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。 + * [simplejson](https://github.com/simplejson/simplejson):Python 的 JSON 编码、解码器。 + * [unidecode](https://pypi.python.org/pypi/Unidecode):Unicode 文本的 ASCII 转换形式 。 + * [uniout](https://github.com/moskytw/uniout):打印可读的字符,而不是转义的字符串。 + * [xpinyin](https://github.com/lxneng/xpinyin):一个用于把汉字转换为拼音的库。 + * [pyfiglet](https://github.com/pwaller/pyfiglet):figlet 的 Python 实现。 + * [flashtext](https://github.com/vi3k6i5/flashtext):一个高效的文本查找替换库。 + * [textdistance](https://github.com/orsinium/textdistance):支持 30 多种算法来计算序列之间的距离。 * Slug 化 - * awesome-slugify:一个 Python slug 化库,可以保持 Unicode。[官网](https://github.com/dimka665/awesome-slugify) - * python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。[官网](https://github.com/un33k/python-slugify) - * unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。[官网](https://github.com/mozilla/unicode-slugify) + * [awesome-slugify](https://github.com/dimka665/awesome-slugify):一个 Python slug 化库,可以保持 Unicode。 + * [python-slugify](https://github.com/un33k/python-slugify):Python slug 化库,可以把 unicode 转化为 ASCII。 + * [unicode-slugify](https://github.com/mozilla/unicode-slugify):一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。 * 解析器 - * phonenumbers:解析,格式化,储存,验证电话号码。[官网](https://github.com/daviddrysdale/python-phonenumbers) - * PLY:lex 和 yacc 解析工具的 Python 实现。[官网](http://www.dabeaz.com/ply/) - * Pygments:通用语法高亮工具。[官网](http://pygments.org/) - * pyparsing:生成通用解析器的框架。[官网](http://pyparsing.wikispaces.com/) - * python-nameparser:把一个人名分解为几个独立的部分。[官网](https://github.com/derek73/python-nameparser) - * python-user-agents:浏览器 user agent 解析器。[官网](https://github.com/selwin/python-user-agents) - * sqlparse:一个无验证的 SQL 解析器。[官网](https://sqlparse.readthedocs.org/en/latest/) + * [phonenumbers](https://github.com/daviddrysdale/python-phonenumbers):解析,格式化,储存,验证电话号码。 + * [python-phonenumbers](https://github.com/daviddrysdale/python-phonenumbers):解析,格式化,存储,校验国际电话号码。 + * [PLY](http://www.dabeaz.com/ply/):lex 和 yacc 解析工具的 Python 实现。 + * [Pygments](http://pygments.org/):通用语法高亮工具。 + * [pyparsing](http://pyparsing.wikispaces.com/):生成通用解析器的框架。 + * [python-nameparser](https://github.com/derek73/python-nameparser):把一个人名分解为几个独立的部分。 + * [python-user-agents](https://github.com/selwin/python-user-agents):浏览器 user agent 解析器。 + * [sqlparse](https://sqlparse.readthedocs.org/en/latest/):一个无验证的 SQL 解析器。 ### 特殊文本格式处理 一些用来解析和操作特殊文本格式的库。 * 通用 - * tablib:一个用来处理中表格数据的模块。[官网](https://github.com/kennethreitz/tablib) + * [tablib](https://github.com/kennethreitz/tablib):一个用来处理中表格数据的模块。 * Office - * Marmir:把输入的 Python 数据结构转换为电子表单。[官网](https://github.com/brianray/mm) - * openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。[官网](https://openpyxl.readthedocs.org/en/latest/) - * pyexcel:一个提供统一 API,用来读写,操作 Excel 文件的库。[官网](https://github.com/pyexcel/pyexcel) - * python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。[官网](https://github.com/python-openxml/python-docx) - * relatorio:模板化 OpenDocument 文件。[官网](http://relatorio.tryton.org/) - * unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。[官网](https://github.com/dagwieers/unoconv) - * XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。[官网](https://xlsxwriter.readthedocs.org/en/latest/) - * xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。[官网](http://xlwings.org/) - * [xlwt](http://hao.importnew.com/xlwt/):读写 Excel 文件的数据和格式信息。[官网](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd) + * [Marmir](https://github.com/brianray/mm):把输入的 Python 数据结构转换为电子表单。 + * [openpyxl](https://openpyxl.readthedocs.org/en/latest/):一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。 + * [pyexcel](https://github.com/pyexcel/pyexcel):一个提供统一 API,用来读写,操作 Excel 文件的库。 + * [python-docx](https://github.com/python-openxml/python-docx):读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。 + * [python-pptx](https://github.com/scanny/python-pptx):可用于创建和修改 ppt 文件的 Python 库。 + * [relatorio](http://relatorio.tryton.org/):模板化 OpenDocument 文件。 + * [unoconv](https://github.com/dagwieers/unoconv):在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。 + * [XlsxWriter](https://xlsxwriter.readthedocs.org/en/latest/):一个用于创建 Excel .xlsx 文件的 Python 模块。 + * [xlwings](http://xlwings.org/):一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。 + * [xlwt](https://github.com/python-excel/xlwt) / [xlrd](https://github.com/python-excel/xlrd):读写 Excel 文件的数据和格式信息。 + * [docxtpl](https://github.com/elapouya/python-docx-template):通过 jinja2 模版编辑 docx 文档。 * PDF - * PDFMiner:一个用于从 PDF 文档中抽取信息的工具。[官网](https://github.com/euske/pdfminer) - * PyPDF2:一个可以分割,合并和转换 PDF 页面的库。[官网](https://github.com/mstamy2/PyPDF2) - * ReportLab:快速创建富文本 PDF 文档。[官网](http://www.reportlab.com/opensource/) + * [PDFMiner](https://github.com/euske/pdfminer):一个用于从 PDF 文档中抽取信息的工具。 + * [PyPDF2](https://github.com/mstamy2/PyPDF2):一个可以分割,合并和转换 PDF 页面的库。 + * [ReportLab](http://www.reportlab.com/opensource/):快速创建富文本 PDF 文档。 * Markdown - * Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。[官网](https://github.com/lepture/mistune) - * Python-Markdown:John Gruber’s Markdown 的 Python 版实现。[官网](https://github.com/waylan/Python-Markdown) - * Python-Markdown2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。[官网](https://github.com/trentm/python-markdown2) + * [Mistune](https://github.com/lepture/mistune):快速并且功能齐全的纯 Python 实现的 Markdown 解析器。 + * [Python-Markdown](https://github.com/waylan/Python-Markdown):John Gruber’s Markdown 的 Python 版实现。 + * [Python-Markdown2](https://github.com/trentm/python-markdown2):纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。 * YAML - * PyYAML:Python 版本的 YAML 解析器。[官网](http://pyyaml.org/) + * [PyYAML](http://pyyaml.org/):Python 版本的 YAML 解析器。 * CSV - * csvkit:用于转换和操作 CSV 的工具。[官网](https://github.com/wireservice/csvkit) + * [csvkit](https://github.com/wireservice/csvkit):用于转换和操作 CSV 的工具。 * Archive - * unp:一个用来方便解包归档文件的命令行工具。[官网](https://github.com/mitsuhiko/unp) + * [unp](https://github.com/mitsuhiko/unp):一个用来方便解包归档文件的命令行工具。 ### 自然语言处理 用来处理人类语言的库。 -* [NLTK](http://hao.importnew.com/nltk/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。[官网](http://www.nltk.org/) -* jieba:中文分词工具。[官网](https://github.com/fxsjy/jieba) -* langid.py:独立的语言识别系统。[官网](https://github.com/saffsd/langid.py) -* Pattern:Python 网络信息挖掘模块。[官网](http://www.clips.ua.ac.be/pattern) -* SnowNLP:一个用来处理中文文本的库。[官网](https://github.com/isnowfy/snownlp) -* TextBlob:为进行普通自然语言处理任务提供一致的 API。[官网](http://textblob.readthedocs.org/en/latest/) -* TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。[官网](https://github.com/2shou/TextGrocery) -*   thulac:清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包[官网](https://github.com/thunlp/THULAC-Python) +* [NLTK](http://www.nltk.org/):一个先进的平台,用以构建处理人类语言数据的 Python 程序。 +* [gensim](https://github.com/piskvorky/gensim):人性化的话题建模库。 +* [jieba](https://github.com/fxsjy/jieba):中文分词工具。 +* [langid.py](https://github.com/saffsd/langid.py):独立的语言识别系统。 +* [Pattern](http://www.clips.ua.ac.be/pattern):Python 网络信息挖掘模块。 +* [SnowNLP](https://github.com/isnowfy/snownlp):一个用来处理中文文本的库。 +* [TextBlob](http://textblob.readthedocs.org/en/latest/):为进行普通自然语言处理任务提供一致的 API。 +* [TextGrocery](https://github.com/2shou/TextGrocery):一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。 +* [thulac](https://github.com/thunlp/THULAC-Python):清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包。 +* [polyglot](https://github.com/aboSamoor/polyglot):支持数百种语言的自然语言处理管道。 +* [pytext](https://github.com/facebookresearch/pytext):基于 PyTouch 的自然语言模型框架。 +* [PyTorch-NLP](https://github.com/PetrochukM/PyTorch-NLP):一个支持快速深度学习 NLP 原型研究的工具包。 +* [spacy](https://spacy.io/):Python 和 Cython 中用于工业级自然语言处理的库。 +* [Stanza](https://github.com/stanfordnlp/stanza):斯坦福 NLP 集团的官方 Python 库,支持60多种语言。 +* [funNLP](https://github.com/fighting41love/funNLP):中文自然语言处理的工具和数据集。 +* [pkuseg-python](https://github.com/lancopku/pkuseg-python):一个支持对不同领域进行中文分词的工具箱。 ### 文档 用以生成项目文档的库。 -* [Sphinx](http://hao.importnew.com/sphinx/):Python 文档生成器。[官网](http://www.sphinx-doc.org/en/latest/) -* awesome-sphinxdoc:[官网](https://github.com/yoloseem/awesome-sphinxdoc) -* MkDocs:对 Markdown 友好的文档生成器。[官网](http://www.mkdocs.org/) -* pdoc:一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。[官网](https://github.com/BurntSushi/pdoc) -* Pycco:文学编程(literate-programming)风格的文档生成器。[官网](https://github.com/pycco-docs/pycco) -* readthedocs:一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。[官网](https://github.com/rtfd/readthedocs.org/) +* [Sphinx](http://www.sphinx-doc.org/en/latest/):Python 文档生成器。 + * [awesome-sphinxdoc](https://github.com/yoloseem/awesome-sphinxdoc) +* [MkDocs](http://www.mkdocs.org/):对 Markdown 友好的文档生成器。 +* [pdoc](https://github.com/BurntSushi/pdoc):一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。 +* [Pycco](https://github.com/pycco-docs/pycco):文学编程(literate-programming)风格的文档生成器。 +* [readthedocs](https://github.com/rtfd/readthedocs.org/):一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。 ### 配置 用来保存和解析配置的库。 -* config:[logging](https://docs.python.org/2/library/logging.html) 模块作者写的分级配置模块。[官网](https://www.red-dove.com/config-doc/) -* ConfigObj:INI 文件解析器,带验证功能。[官网](http://www.voidspace.org.uk/python/configobj.html) -* ConfigParser:(Python 标准库) INI 文件解析器。[官网](https://docs.python.org/2/library/configparser.html) -* profig:通过多种格式进行配置,具有数值转换功能。[官网](http://profig.readthedocs.org/en/default/) -* python-decouple:将设置和代码完全隔离。[官网](https://github.com/henriquebastos/python-decouple) +* [config](https://www.red-dove.com/config-doc/):[logging](https://docs.python.org/2/library/logging.html) 模块作者写的分级配置模块。 +* [ConfigObj](http://www.voidspace.org.uk/python/configobj.html):INI 文件解析器,带验证功能。 +* [ConfigParser](https://docs.python.org/2/library/configparser.html):(Python 标准库) INI 文件解析器。 +* [profig](http://profig.readthedocs.org/en/default/):通过多种格式进行配置,具有数值转换功能。 +* [python-decouple](https://github.com/henriquebastos/python-decouple):将设置和代码完全隔离。 +* [hydra](https://github.com/facebookresearch/hydra):一个优雅地配置复杂应用程序的框架。 ### 命令行工具 用于创建命令行程序的库。 * 命令行程序开发 - * asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级 API。[官网](https://github.com/peterbrittain/asciimatics) - * cement:Python 的命令行程序框架。[官网](http://builtoncement.com/) - * click:一个通过组合的方式来创建精美命令行界面的包。[官网](http://click.pocoo.org/dev/) - * cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。[官网](http://docs.openstack.org/developer/cliff/) - * clint:Python 命令行程序工具。[官网](https://github.com/kennethreitz/clint) - * colorama:跨平台彩色终端文本。[官网](https://pypi.python.org/pypi/colorama) - * docopt:Python 风格的命令行参数解析器。[官网](http://docopt.org/) - * Gooey:一条命令,将命令行程序变成一个 GUI 程序。[官网](https://github.com/chriskiehl/Gooey) - * python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。[官网](https://github.com/jonathanslenders/python-prompt-toolkit) - * python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。[官网](https://github.com/google/python-fire) - * [Pythonpy](http://hao.importnew.com/pythonpy/):在命令行中直接执行任何 Python 指令。[官网](https://github.com/Russell91/pythonpy/wiki) + * [cement](http://builtoncement.com/):Python 的命令行程序框架。 + * [click](http://click.pocoo.org/dev/):一个通过组合的方式来创建精美命令行界面的包。 + * [cliff](http://docs.openstack.org/developer/cliff/):一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。 + * [clint](https://github.com/kennethreitz/clint):Python 命令行程序工具。 + * [docopt](http://docopt.org/):Python 风格的命令行参数解析器。 + * [Gooey](https://github.com/chriskiehl/Gooey):一条命令,将命令行程序变成一个 GUI 程序。 + * [python-prompt-toolkit](https://github.com/jonathanslenders/python-prompt-toolkit):一个用于构建强大的交互式命令行程序的库。 + * [python-fire](https://github.com/google/python-fire):Google 出品的一个基于 Python 类的构建命令行界面的库。 + * [Pythonpy](https://github.com/Russell91/pythonpy/wiki):在命令行中直接执行任何 Python 指令。 +* 终端呈现方式 + * [asciimatics](https://github.com/peterbrittain/asciimatics):跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级 API。 + * [alive-progress](https://github.com/rsalmei/alive-progress):一款新的进度条,具有实时吞吐量信息以及非常酷的动画。 + * [colorama](https://pypi.python.org/pypi/colorama):跨平台彩色终端文本。 + * [bashplotlib](https://github.com/glamp/bashplotlib):在终端中进行基本绘图。 + * [rich](https://github.com/willmcgugan/rich):一个在终端中支持富文本和格式美化的 Python 库, 同时提供了`RichHandler`日志处理程序。 + * [tqdm](https://github.com/tqdm/tqdm):一个可在循环和命令行中使用的快速、可扩展的进度条。 * 生产力工具 - * aws-cli:Amazon Web Services 的通用命令行界面。[官网](https://github.com/aws/aws-cli) - * bashplotlib:在终端中进行基本绘图。[官网](https://github.com/glamp/bashplotlib) - * caniusepython3:判断是哪个项目妨碍你你移植到 Python3。[官网](https://github.com/brettcannon/caniusepython3) - * cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。[官网](https://github.com/audreyr/cookiecutter) - * doitlive:一个用来在终端中进行现场演示的工具。[官网](https://github.com/sloria/doitlive) - * pyftpdlib:一个速度极快和可扩展的 Python FTP 服务库。[官网](https://github.com/giampaolo/pyftpdlib) - * howdoi:通过命令行获取即时的编程问题解答。[官网](https://github.com/gleitz/howdoi) - * httpie:一个命令行 HTTP 客户端,cURL 的替代品,易用性更好。[官网](https://github.com/jkbrzt/httpie) - * PathPicker:从 bash 输出中选出文件。[官网](https://github.com/facebook/PathPicker) - * percol:向 UNIX shell 传统管道概念中加入交互式选择功能。[官网](https://github.com/mooz/percol) - * SAWS:一个加强版的 AWS 命令行。[官网](https://github.com/donnemartin/saws) - * thefuck:修正你之前的命令行指令。[官网](https://github.com/nvbn/thefuck) - * mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/mycli) - * pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。[官网](https://github.com/dbcli/pgcli) - * try:一个从来没有更简单的命令行工具,用来试用 python 库。[官网](https://github.com/timofurrer/try) + * [aws-cli](https://github.com/aws/aws-cli):Amazon Web Services 的通用命令行界面。 + * [caniusepython3](https://github.com/brettcannon/caniusepython3):判断是哪个项目妨碍你你移植到 Python3。 + * [cookiecutter](https://github.com/audreyr/cookiecutter):从 cookiecutters(项目模板)创建项目的一个命令行工具。 + * [doitlive](https://github.com/sloria/doitlive):一个用来在终端中进行现场演示的工具。 + * [pyftpdlib](https://github.com/giampaolo/pyftpdlib):一个速度极快和可扩展的 Python FTP 服务库。 + * [howdoi](https://github.com/gleitz/howdoi):通过命令行获取即时的编程问题解答。 + * [PathPicker](https://github.com/facebook/PathPicker):从 bash 输出中选出文件。 + * [percol](https://github.com/mooz/percol):向 UNIX shell 传统管道概念中加入交互式选择功能。 + * [thefuck](https://github.com/nvbn/thefuck):修正你之前的命令行指令。 + * [try](https://github.com/timofurrer/try):一个极其简单的命令行工具,用来试用 python 库。 + * [copier](https://github.com/pykong/copier):用于呈现项目模板的库和命令行实用程序。 + * [Invoke](https://github.com/pyinvoke/invoke#readme):用于管理面向 shell 的子进程,同时支持将可执行的 Python 代码组织成命令行可调用的状态。 + * [tmuxp](https://github.com/tony/tmuxp): [tmux](https://github.com/tmux/tmux) 会话管理器。 +* 高级 CLI + * [httpie](https://github.com/jkbrzt/httpie):一个命令行 HTTP 客户端,cURL 的替代品,易用性更好。 + * [iredis](https://github.com/laixintao/iredis):支持自动补全和高亮显示的 redis 命令行工具。 + * [kube-shell](https://github.com/cloudnativelabs/kube-shell):K8S 命令行集成的 shell 工具。 + * [litecli](https://github.com/dbcli/litecli):支持自动补全和语法高亮的 SQLite 命令行工具。 + * [mycli](https://github.com/dbcli/mycli):支持自动补全和语法高亮的 MySQL 命令行客户端 + * [pgcli](https://github.com/dbcli/pgcli):支持自动补全和语法高亮的 Postgres 命令行工具。 + * [SAWS](https://github.com/donnemartin/saws):一个加强版的 AWS 命令行。 +* Shell + * [xonsh](https://github.com/xonsh/xonsh/):一种基于 python 的跨平台,面向 unix 的 shell 语言和命令提示符。 ### 下载器 用来进行下载的库. -* s3cmd:一个用来管理 Amazon S3 和 CloudFront 的命令行工具。[官网](https://github.com/s3tools/s3cmd) -* s4cmd:超级 S3 命令行工具,性能更加强劲。[官网](https://github.com/bloomreach/s4cmd) -* you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。[官网](https://www.soimort.org/you-get/) -* youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。[官网](http://rg3.github.io/youtube-dl/) +* [s3cmd](https://github.com/s3tools/s3cmd):一个用来管理 Amazon S3 和 CloudFront 的命令行工具。 +* [s4cmd](https://github.com/bloomreach/s4cmd):超级 S3 命令行工具,性能更加强劲。 +* [you-get](https://www.soimort.org/you-get/):一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。 +* [youtube-dl](http://rg3.github.io/youtube-dl/):一个小巧的命令行程序,用来下载 YouTube 视频。 +* [akshare](https://github.com/jindaxiang/akshare):为方便人使用而创建的金融数据接口库。 ### 图像处理 用来操作图像的库. -* [pillow](http://hao.importnew.com/pillow/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。[官网](http://pillow.readthedocs.org/en/latest/) -* hmap:图像直方图映射。[官网](https://github.com/rossgoodwin/hmap) -* imgSeek:一个使用视觉相似性搜索一组图片集合的项目。[官网](https://sourceforge.net/projects/imgseek/) -* nude.py:裸体检测。[官网](https://github.com/hhatto/nude.py) -* pyBarcode:不借助 PIL 库在 Python 程序中生成条形码。[官网](https://pythonhosted.org/pyBarcode/) -* pygram:类似 Instagram 的图像滤镜。[官网](https://github.com/ajkumar25/pygram) -* python-qrcode:一个纯 Python 实现的二维码生成器。[官网](https://github.com/lincolnloop/python-qrcode) -* Quads:基于四叉树的计算机艺术。[官网](https://github.com/fogleman/Quads) -* scikit-image:一个用于(科学)图像处理的 Python 库。[官网](http://scikit-image.org/) -* thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。[官网](https://github.com/thumbor/thumbor) -* wand:[MagickWand](http://www.imagemagick.org/script/magick-wand.php)的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。[官网](https://github.com/dahlia/wand) -* face_recognition:简单易用的 python 人脸识别库。[官网](https://github.com/ageitgey/face_recognition) +* [pillow](http://pillow.readthedocs.org/en/latest/):Pillow 是一个更加易用版的 [PIL](http://www.pythonware.com/products/pil/)。 +* [hmap](https://github.com/rossgoodwin/hmap):图像直方图映射。 +* [imgSeek](https://sourceforge.net/projects/imgseek/):一个使用视觉相似性搜索一组图片集合的项目。 +* [nude.py](https://github.com/hhatto/nude.py):裸体检测。 +* [python-barcode](https://github.com/WhyNotHugo/python-barcode):不借助其他库在 Python 程序中生成条形码。 +* [pygram](https://github.com/ajkumar25/pygram):类似 Instagram 的图像滤镜。 +* [python-qrcode](https://github.com/lincolnloop/python-qrcode):一个纯 Python 实现的二维码生成器。 +* [Quads](https://github.com/fogleman/Quads):基于四叉树的计算机艺术。 +* [scikit-image](http://scikit-image.org/):一个用于(科学)图像处理的 Python 库。 +* [thumbor](https://github.com/thumbor/thumbor):一个小型图像服务,具有剪裁,尺寸重设和翻转功能。 +* [wand](https://github.com/dahlia/wand):[MagickWand ](http://www.imagemagick.org/script/magick-wand.php)的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。 +* [face_recognition](https://github.com/ageitgey/face_recognition):简单易用的 python 人脸识别库。 +* [pagan](https://github.com/daboth/pagan):基于输入和哈希的复古风图标(头像)生成工具。 +* [PyMatting](https://github.com/pymatting/pymatting):支持 alpha matting 的库。 +* [pywal](https://github.com/dylanaraps/pywal):由图像生成配色方案的工具。 +* [pyvips](https://github.com/libvips/pyvips):低内存消耗且快速的图像处理库。 ### OCR 光学字符识别库。 -* pyocr:Tesseract 和 Cuneiform 的一个封装(wrapper)。[官网](https://github.com/jflesch/pyocr) -* [pytesseract](http://hao.importnew.com/pytesseract/):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一个封装(wrapper)。[官网](https://github.com/madmaze/pytesseract) -* python-tesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个包装类。 +* [pyocr](https://gitlab.gnome.org/World/OpenPaperwork/pyocr):Tesseract 和 Cuneiform 的一个封装。 +* [pytesseract](https://github.com/madmaze/pytesseract):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个封装。 ### 音频 用来操作音频的库 -* audiolazy:Python 的数字信号处理包。[官网](https://github.com/danilobellini/audiolazy) -* audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。[官网](https://github.com/beetbox/audioread) -* beets:一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具。[官网](http://beets.io/) -* dejavu:音频指纹提取和识别。[官网](https://github.com/worldveil/dejavu) -* [django-elastic-transcoder](http://hao.importnew.com/django-elastic-transcoder/):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。[官网](https://github.com/StreetVoice/django-elastic-transcoder) -* eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。[官网](http://eyed3.nicfit.net/) -* id3reader:一个用来读取 MP3 元数据的 Python 模块。[官网](http://nedbatchelder.com/code/modules/id3reader.py) -* m3u8:一个用来解析 m3u8 文件的模块。[官网](https://github.com/globocom/m3u8) -* mutagen:一个用来处理音频元数据的 Python 模块。[官网](https://bitbucket.org/lazka/mutagen) -* pydub:通过简单、简洁的高层接口来操作音频文件。[官网](https://github.com/jiaaro/pydub) -* pyechonest:[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端。[官网](https://github.com/echonest/pyechonest) -* talkbox:一个用来处理演讲/信号的 Python 库。[官网](http://scikits.appspot.com/talkbox) -* TimeSide:开源 web 音频处理框架。[官网](https://github.com/Parisson/TimeSide) -* tinytag:一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。[官网](https://github.com/devsnd/tinytag) -* mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。[官网](http://bspaans.github.io/python-mingus/) +* [audiolazy](https://github.com/danilobellini/audiolazy):Python 的数字信号处理包。 +* [audioread](https://github.com/beetbox/audioread):交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。 +* [beets](http://beets.io/):一个音乐库管理工具及 [MusicBrainz](https://musicbrainz.org/) 标签添加工具。 +* [dejavu](https://github.com/worldveil/dejavu):音频指纹提取和识别。 +* [django-elastic-transcoder](https://github.com/StreetVoice/django-elastic-transcoder):Django + [Amazon Elastic Transcoder](http://aws.amazon.com/elastictranscoder/)。 +* [eyeD3](http://eyed3.nicfit.net/):一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。 +* [id3reader](http://nedbatchelder.com/code/modules/id3reader.py):一个用来读取 MP3 元数据的 Python 模块。 +* [m3u8](https://github.com/globocom/m3u8):一个用来解析 m3u8 文件的模块。 +* [mutagen](https://bitbucket.org/lazka/mutagen):一个用来处理音频元数据的 Python 模块。 +* [pydub](https://github.com/jiaaro/pydub):通过简单、简洁的高层接口来操作音频文件。 +* [pyechonest](https://github.com/echonest/pyechonest):[Echo Nest](http://developer.echonest.com/) API 的 Python 客户端。 +* [talkbox](http://scikits.appspot.com/talkbox):一个用来处理演讲/信号的 Python 库。 +* [TimeSide](https://github.com/Parisson/TimeSide):开源 web 音频处理框架。 +* [tinytag](https://github.com/devsnd/tinytag):一个用来读取 MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。 +* [mingus](http://bspaans.github.io/python-mingus/):一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。 +* [kapre](https://github.com/keunwoochoi/kapre):Keras 音频处理器。 +* [librosa](https://github.com/librosa/librosa):音频音乐分析 Python 库。 +* [matchering](https://github.com/sergree/matchering):用于音频母带制作的库。 +* [pyAudioAnalysis](https://github.com/tyiannak/pyAudioAnalysis):音频特征提取,分类,分段和应用。 +* [beets](https://github.com/beetbox/beets):一个音乐库管理器和 [MusicBrainz](https://musicbrainz.org/) 标记器。 ### Video 用来操作视频和 GIF 的库。 -* moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。[官网](http://zulko.github.io/moviepy/) -* scikit-video:SciPy 视频处理常用程序。[官网](https://github.com/aizvorski/scikit-video) +* [moviepy](http://zulko.github.io/moviepy/):一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。 +* [scikit-video](https://github.com/aizvorski/scikit-video):SciPy 视频处理常用程序。 +* [vidgear](https://github.com/abhiTronix/vidgear): 强大的多线程视频处理框架。 ### 地理位置 地理编码地址以及用来处理经纬度的库。 -* GeoDjango:世界级地理图形 web 框架。[官网](https://docs.djangoproject.com/en/dev/ref/contrib/gis/) -* GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。[官网](https://github.com/maxmind/geoip-api-python) -* geojson:GeoJSON 的 Python 绑定及工具。[官网](https://github.com/frewsxcv/python-geojson) -* geopy:Python 地址编码工具箱。[官网](https://github.com/geopy/geopy) -* GeoIP2:GeoIP2 Webservice 客户端与数据库 Python API。[官网](https://github.com/maxmind/GeoIP2-python) -* django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。[官网](https://github.com/SmileyChris/django-countries) +* [GeoDjango](https://docs.djangoproject.com/en/dev/ref/contrib/gis/):世界级地理图形 web 框架。 +* [GeoIP](https://github.com/maxmind/geoip-api-python):MaxMind GeoIP Legacy 数据库的 Python API。 +* [geojson](https://github.com/frewsxcv/python-geojson):GeoJSON 的 Python 绑定及工具。 +* [geopy](https://github.com/geopy/geopy):Python 地址编码工具箱。 +* [GeoIP2](https://github.com/maxmind/GeoIP2-python):GeoIP2 Webservice 客户端与数据库 Python API。 +* [django-countries](https://github.com/SmileyChris/django-countries):一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。 +* [pygeoip](https://github.com/appliedsec/pygeoip):Python GeoIP 接口。 ### HTTP 使用 HTTP 的库。 -* aiohttp:基于 asyncio 的异步 HTTP 网络库。[官网](https://github.com/aio-libs/aiohttp) -* requests:人性化的 HTTP 请求库。[官网](http://docs.python-requests.org/en/latest/) -* grequests:requests 库 + gevent ,用于异步 HTTP 请求.[官网](https://github.com/kennethreitz/grequests) -* httplib2:全面的 HTTP 客户端库。[官网](https://github.com/jcgregorio/httplib2) -* treq:类似 requests 的 Python API 构建于 Twisted HTTP 客户端之上。[官网](https://github.com/twisted/treq) -* urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。[官网](https://github.com/shazow/urllib3) + +* [aiohttp](https://github.com/aio-libs/aiohttp):基于 asyncio 的异步 HTTP 网络库。 +* [requests](http://docs.python-requests.org/en/latest/):人性化的 HTTP 请求库。 +* [grequests](https://github.com/kennethreitz/grequests):requests 库 + gevent ,用于异步 HTTP 请求。 +* [httplib2](https://github.com/jcgregorio/httplib2):全面的 HTTP 客户端库。 +* [treq](https://github.com/twisted/treq):类似 requests 的 Python API 构建于 Twisted HTTP 客户端之上。 +* [urllib3](https://github.com/shazow/urllib3):一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。 +* [httpx](https://github.com/encode/httpx):下一代 Python HTTP 客户端。 ### 数据库 Python 实现的数据库。 -* pickleDB:一个简单,轻量级键值储存数据库。[官网](https://pythonhosted.org/pickleDB/) -* PipelineDB:流式 SQL 数据库。[官网](https://www.pipelinedb.com/) -* TinyDB:一个微型的,面向文档型数据库。[官网](https://github.com/msiemens/tinydb) -* ZODB:一个 Python 原生对象数据库。一个键值和对象图数据库。[官网](http://www.zodb.org/en/latest/) +* [pickleDB](https://pythonhosted.org/pickleDB/):一个简单,轻量级键值储存数据库。 +* [PipelineDB](https://www.pipelinedb.com/):流式 SQL 数据库。 +* [TinyDB](https://github.com/msiemens/tinydb):一个微型的,面向文档型数据库。 +* [ZODB](http://www.zodb.org/en/latest/):一个 Python 原生对象数据库。一个键值和对象图数据库。 ### 数据库驱动 用来连接和操作数据库的库。 * MySQL:[awesome-mysql](http://shlomi-noach.github.io/awesome-mysql/) 系列 - * aiomysql:基于 asyncio 的异步 MySQL 数据库操作库。[官网](https://github.com/aio-libs/aiomysql) - * mysql-python:Python 的 MySQL 数据库连接器。[官网](https://sourceforge.net/projects/mysql-python/) + * [aiomysql](https://github.com/aio-libs/aiomysql):基于 asyncio 的异步 MySQL 数据库操作库。 + * [mysql-python](https://sourceforge.net/projects/mysql-python/):Python 的 MySQL 数据库连接器。 * ysqlclient:[mysql-python](https://github.com/PyMySQL/mysqlclient-python) 分支,支持 Python 3。 - * oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs。[官网](https://pythonhosted.org/oursql/) - * PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。[官网](https://github.com/PyMySQL/PyMySQL) + * [oursql](https://pythonhosted.org/oursql/):一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs。 + * [PyMySQL](https://github.com/PyMySQL/PyMySQL):纯 Python MySQL 驱动,兼容 mysql-python。 * PostgreSQL - * psycopg2:Python 中最流行的 PostgreSQL 适配器。[官网](http://initd.org/psycopg/) - * queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。[官网](https://github.com/gmr/queries) - * txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。[官网](http://txpostgres.readthedocs.org/en/latest/) + * [psycopg2](http://initd.org/psycopg/):Python 中最流行的 PostgreSQL 适配器。 + * [queries](https://github.com/gmr/queries):psycopg2 库的封装,用来和 PostgreSQL 进行交互。 + * [txpostgres](http://txpostgres.readthedocs.org/en/latest/):基于 Twisted 的异步 PostgreSQL 驱动。 * 其他关系型数据库 - * apsw:另一个 Python SQLite 封装。[官网](http://rogerbinns.github.io/apsw/) + * [apsw](http://rogerbinns.github.io/apsw/):另一个 Python SQLite 封装。 * dataset:在数据库中存储 Python 字典 - * pymssql:一个简单的 Microsoft SQL Server 数据库接口。[官网](http://www.pymssql.org/en/latest/) + * [pymssql](http://www.pymssql.org/en/latest/):一个简单的 Microsoft SQL Server 数据库接口。 * NoSQL 数据库 - * asyncio-redis:基于 asyncio 的 redis 客户端 (PEP 3156)。[官网](https://github.com/jonathanslenders/asyncio-redis) - * cassandra-python-driver:Cassandra 的 Python 驱动。[官网](https://github.com/datastax/python-driver) - * HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。[官网](http://happybase.readthedocs.org/en/latest/) - * Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。[官网](https://plyvel.readthedocs.org/en/latest/) - * py2neo:Neo4j restful 接口的 Python 封装客户端。[官网](http://py2neo.org/2.0/) - * pycassa:Cassandra 的 Python Thrift 驱动。[官网](https://github.com/pycassa/pycassa) - * PyMongo:MongoDB 的官方 Python 客户端。[官网](https://docs.mongodb.org/ecosystem/drivers/python/) - * redis-py:Redis 的 Python 客户端。[官网](https://github.com/andymccurdy/redis-py) - * telephus:基于 Twisted 的 Cassandra 客户端。[官网](https://github.com/driftx/Telephus) - * txRedis:基于 Twisted 的 Redis 客户端。[官网](https://github.com/deldotdr/txRedis) + * [asyncio-redis](https://github.com/jonathanslenders/asyncio-redis):基于 asyncio 的 redis 客户端 (PEP 3156)。 + * [cassandra-python-driver](https://github.com/datastax/python-driver):Cassandra 的 Python 驱动。 + * [HappyBase](http://happybase.readthedocs.org/en/latest/):一个为 Apache HBase 设计的,对开发者友好的库。 + * [Plyvel](https://plyvel.readthedocs.org/en/latest/):一个快速且功能丰富的 LevelDB 的 Python 接口。 + * [py2neo](http://py2neo.org/2.0/):Neo4j restful 接口的 Python 封装客户端。 + * [pycassa](https://github.com/pycassa/pycassa):Cassandra 的 Python Thrift 驱动。 + * [PyMongo](https://docs.mongodb.org/ecosystem/drivers/python/):MongoDB 的官方 Python 客户端。 + * [redis-py](https://github.com/andymccurdy/redis-py):Redis 的 Python 客户端。 + * [telephus](https://github.com/driftx/Telephus):基于 Twisted 的 Cassandra 客户端。 + * [txRedis](https://github.com/deldotdr/txRedis):基于 Twisted 的 Redis 客户端。 + * [kafka-python](https://github.com/dpkp/kafka-python):Apache Kafka Python 客户端。 +* 异步客户端 + * [motor](https://github.com/mongodb/motor):支持 MongoDB 的异步 Python 驱动程序。 ### ORM 实现对象关系映射或数据映射技术的库。 * 关系型数据库 - * Django Models:Django 的一部分。[官网](https://docs.djangoproject.com/en/dev/topics/db/models/) - * SQLAlchemy:Python SQL 工具以及对象关系映射工具。[官网](http://www.sqlalchemy.org/) - * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 - * [Peewee](http://hao.importnew.com/peewee/):一个小巧,富有表达力的 ORM。[官网](https://github.com/coleifer/peewee) - * PonyORM:提供面向生成器的 SQL 接口的 ORM。[官网](https://ponyorm.com/) - * python-sql:编写 Python 风格的 SQL 查询。[官网](https://pypi.python.org/pypi/python-sql) + * [Django Models](https://docs.djangoproject.com/en/dev/topics/db/models/):Django 的一部分。 + * [SQLAlchemy](http://www.sqlalchemy.org/):Python SQL 工具以及对象关系映射工具。 + * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) + * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 + * [Peewee](https://github.com/coleifer/peewee):一个小巧,富有表达力的 ORM。 + * [PonyORM](https://ponyorm.com/):提供面向生成器的 SQL 接口的 ORM。 + * [python-sql](https://pypi.python.org/pypi/python-sql):编写 Python 风格的 SQL 查询。 + * [dataset](https://github.com/pudo/dataset):在数据库中存储字典,支持 SQLite,MySQL 和 PostgreSQL。 + * [orator](https://github.com/sdispater/orator):Orator ORM,提供了一个简单而美观的 ActiveRecord 实现。 + * [orm](https://github.com/encode/orm):一个异步的 ORM。 + * [peewee](https://github.com/coleifer/peewee):一个小但是很有表现力的 ORM。 + * [pony](https://github.com/ponyorm/pony/):提供面向生成器的SQL接口的ORM。 + * [pydal](https://github.com/web2py/pydal/):纯 Python 数据库抽象接口层。 * NoSQL 数据库 - * django-mongodb-engine:Django MongoDB 后端。[官网](https://github.com/django-nonrel/mongodb-engine) - * PynamoDB:[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。[官网](https://github.com/jlafon/PynamoDB) - * flywheel:Amazon DynamoDB 的对象映射工具。[官网](https://github.com/mathcamp/flywheel) - * MongoEngine:一个 Python 对象文档映射工具,用于 MongoDB。[官网](http://mongoengine.org/) - * hot-redis:为 Redis 提供 Python 丰富的数据类型。[官网](https://github.com/stephenmcd/hot-redis) - * redisco:一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。[官网](https://github.com/kiddouk/redisco) + * [django-mongodb-engine](https://github.com/django-nonrel/mongodb-engine):Django MongoDB 后端。 + * [PynamoDB](https://github.com/jlafon/PynamoDB):[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 的一个 Python 风格接口。 + * [flywheel](https://github.com/mathcamp/flywheel):Amazon DynamoDB 的对象映射工具。 + * [MongoEngine](http://mongoengine.org/):一个 Python 对象文档映射工具,用于 MongoDB。 + * [hot-redis](https://github.com/stephenmcd/hot-redis):为 Redis 提供 Python 丰富的数据类型。 + * [redisco](https://github.com/kiddouk/redisco):一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。 * 其他 - * butterdb:Google Drive 电子表格的 Python ORM。[官网](https://github.com/Widdershin/butterdb) + * [butterdb](https://github.com/Widdershin/butterdb):Google Drive 电子表格的 Python ORM。 ### Web 框架 全栈 Web 框架。 -* [Django](http://hao.importnew.com/django/):Python 界最流行的 web 框架。[官网](https://www.djangoproject.com/) - * [awesome-django](https://gitlab.com/rosarior/awesome-django) 系列 -* [Flask](http://hao.importnew.com/flask/):一个 Python 微型框架。[官网](http://flask.pocoo.org/) +* [Django](https://www.djangoproject.com/):Python 界最流行的 web 框架。 + * [awesome-django(by shahraizali)](https://github.com/shahraizali/awesome-django) 系列 + * [awesome-django(by wsvincent)](https://github.com/wsvincent/awesome-django) 系列 +* [Flask](http://flask.pocoo.org/):一个 Python 微型框架。 * [awesome-flask](https://github.com/humiaozuzu/awesome-flask) 系列 -* pyramid:一个小巧,快速,接地气的开源 Python web 框架。 +* [Pyramid](https://pylonsproject.org/):一个小巧,快速,接地气的开源 Python web 框架。 * [awesome-pyramid](https://github.com/uralbash/awesome-pyramid) 系列 -* [Bottle](http://hao.importnew.com/bottle/):一个快速小巧,轻量级的 WSGI 微型 web 框架。[官网](http://bottlepy.org/docs/dev/index.html) -* CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。[官网](http://www.cherrypy.org/) -* TurboGears:一个可以扩展为全栈解决方案的微型框架。[官网](http://www.turbogears.org/) -* [web.py](http://hao.importnew.com/python-webpy/):一个 Python 的 web 框架,既简单,又强大。[官网](http://webpy.org/) -* web2py:一个全栈 web 框架和平台,专注于简单易用。[官网](http://www.web2py.com/) -* [Tornado](http://hao.importnew.com/tornado/):一个 web 框架和异步网络库。[官网](http://www.tornadoweb.org/en/latest/) -* sanic:基于 Python3.5+ 的异步网络框架。[官网](https://github.com/channelcat/sanic/) -* starlette: 一款轻量级,高性能的 ASGI 框架 🌟。 [官网](https://www.starlette.io/) +* [Bottle](http://bottlepy.org/docs/dev/index.html):一个快速小巧,轻量级的 WSGI 微型 web 框架。 +* [CherryPy](http://www.cherrypy.org/):一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。 +* [TurboGears](http://www.turbogears.org/):一个可以扩展为全栈解决方案的微型框架。 +* [web.py](http://webpy.org/):一个 Python 的 web 框架,既简单,又强大。 +* [web2py](http://www.web2py.com/):一个全栈 web 框架和平台,专注于简单易用。 +* [Tornado](http://www.tornadoweb.org/en/latest/):一个 web 框架和异步网络库。 +* [sanic](https://github.com/channelcat/sanic/):基于 Python3.5+ 的异步网络框架。 +* [starlette](https://www.starlette.io/): 一款轻量级,高性能的 ASGI 框架。 +* [Masonite](https://github.com/MasoniteFramework/masonite):以开发者为中心的现代 Python Web 框架。 + +### WebSocket + +Web socket 相关库。 + +* [autobahn-python](https://github.com/crossbario/autobahn-python):适用于 Twisted 和 asyncio 的 Python WebSocket 和 WAMP。 +* [channels](https://github.com/django/channels):开发者友好的 Django 异步工具。 +* [websockets](https://github.com/aaugustin/websockets):一个用于构建 WebSocket 服务器和客户端的库,着重于正确性和简单性。 ### 权限 允许或拒绝用户访问数据或功能的库。 -* Carteblanche:站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。[官网](https://github.com/neuman/python-carteblanche/) -* django-guardian:Django 1.2+ 实现了单个对象权限。[官网](https://github.com/django-guardian/django-guardian) -* django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。[官网](https://github.com/dfunckt/django-rules) +* [Carteblanche](https://github.com/neuman/python-carteblanche/):站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。 +* [django-guardian](https://github.com/django-guardian/django-guardian):Django 1.2+ ,实现了单个对象权限。 +* [django-rules](https://github.com/dfunckt/django-rules):一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。 ### CMS -内容管理系统 - -* odoo-cms: 一个开源的,企业级 CMS,基于 odoo。[官网](http://www.odoo.com) -* django-cms:一个开源的,企业级 CMS,基于 Django。[官网](http://www.django-cms.org/en/) -* djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。[官网](http://djedi-cms.org/) -* FeinCMS:基于 Django 构建的最先进的内容管理系统之一。[官网](http://www.feincms.org/) -* Kotti:一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。[官网](http://kotti.pylonsproject.org/) -* Mezzanine:一个强大的,持续的,灵活的内容管理平台。[官网](http://mezzanine.jupo.org/) -* Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。[官网](http://opps.github.io/opps/) -* Plone:一个构建于开源应用服务器 Zope 之上的 CMS。[官网](https://plone.org/) -* Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。[官网](http://quokkaproject.org/) -* [Wagtail](http://hao.importnew.com/wagtail/):一个 Django 内容管理系统。[官网](https://wagtail.io/) -* Widgy:最新的 CMS 框架,基于 Django。[官网](https://wid.gy/) +内容管理系统。 + +* [odoo-cms](http://www.odoo.com):一个开源的,企业级 CMS,基于 odoo。 +* [django-cms](http://www.django-cms.org/en/):一个开源的,企业级 CMS,基于 Django。 +* [djedi-cms](http://djedi-cms.org/):一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。 +* [FeinCMS](http://www.feincms.org/):基于 Django 构建的最先进的内容管理系统之一。 +* [Kotti](http://kotti.pylonsproject.org/):一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。 +* [Mezzanine](http://mezzanine.jupo.org/):一个强大的,持续的,灵活的内容管理平台。 +* [Opps](http://opps.github.io/opps/):一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。 +* [Plone](https://plone.org/):一个构建于开源应用服务器 Zope 之上的 CMS。 +* [Quokka](http://quokkaproject.org/):灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。 +* [Wagtail](https://wagtail.io/):一个 Django 内容管理系统。 +* [Widgy](https://wid.gy/):最新的 CMS 框架,基于 Django。 +* [indico](https://github.com/indico/indico):一个功能丰富的事件管理系统,由 @[CERN](https://en.wikipedia.org/wiki/CERN) 开发。 ### 电子商务 用于电子商务以及支付的框架和库。 -* django-oscar:一个用于 Django 的开源的电子商务框架。[官网](http://oscarcommerce.com/) -* django-shop:一个基于 Django 的店铺系统。[官网](https://github.com/awesto/django-shop) -* Cartridge:一个基于 Mezzanine 构建的购物车应用。[官网](https://github.com/stephenmcd/cartridge) -* shoop:一个基于 Django 的开源电子商务平台。[官网](https://www.shoop.io/en/) -* alipay:非官方的 Python 支付宝 API。[官网](https://github.com/lxneng/alipay) -* merchant:一个可以接收来自多种支付平台支付的 Django 应用。[官网](https://github.com/agiliq/merchant) -* money:一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。[官网](https://github.com/carlospalol/money) -* python-currencies:显示货币格式以及它的数值。[官网](https://github.com/Alir3z4/python-currencies) +* [django-oscar](http://oscarcommerce.com/):一个用于 Django 的开源的电子商务框架。 +* [django-shop](https://github.com/awesto/django-shop):一个基于 Django 的店铺系统。 +* [Cartridge](https://github.com/stephenmcd/cartridge):一个基于 Mezzanine 构建的购物车应用。 +* [shoop](https://www.shoop.io/en/):一个基于 Django 的开源电子商务平台。 +* [alipay](https://github.com/lxneng/alipay):非官方的 Python 支付宝 API。 +* [merchant](https://github.com/agiliq/merchant):一个可以接收来自多种支付平台支付的 Django 应用。 +* [money](https://github.com/carlospalol/money):一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。 +* [python-currencies](https://github.com/Alir3z4/python-currencies):显示货币格式以及它的数值。 +* [forex-python](https://github.com/MicroPyramid/forex-python):外汇汇率,比特币价格指数和货币换算。 +* [saleor](http://getsaleor.com/):一款兼容 Django 的电子商务平台。 ### RESTful API 用来开发 RESTful APIs 的库 * Django - * [django-rest-framework](http://hao.importnew.com/django-rest-framework/):一个强大灵活的工具,用来构建 web API。[官网](http://www.django-rest-framework.org/) - * django-tastypie:为 Django 应用开发 API。[官网](http://tastypieapi.org/) - * django-formapi:为 Django 的表单验证,创建 JSON APIs 。[官网](https://github.com/5monkeys/django-formapi) + * [django-rest-framework](http://www.django-rest-framework.org/):一个强大灵活的工具,用来构建 web API。 + * [django-tastypie](http://tastypieapi.org/):为 Django 应用开发 API。 + * [django-formapi](https://github.com/5monkeys/django-formapi):为 Django 的表单验证,创建 JSON APIs 。 * Flask - * flask-api:为 flask 开发的,可浏览 Web APIs 。[官网](http://www.flaskapi.org/) - * flask-restful:为 flask 快速创建 REST APIs 。[官网](http://flask-restful.readthedocs.org/en/latest/) - * flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。[官网](https://flask-restless.readthedocs.org/en/latest/) - * flask-api-utils:为 Flask 处理 API 表示和验证。[官网](https://github.com/marselester/flask-api-utils) - * eve:REST API 框架,由 Flask, MongoDB 等驱动。[官网](https://github.com/nicolaiarocci/eve) + * [flask-api](http://www.flaskapi.org/):为 flask 开发的,可浏览 Web APIs 。 + * [flask-restful](http://flask-restful.readthedocs.org/en/latest/):为 flask 快速创建 REST APIs 。 + * [flask-restless](https://flask-restless.readthedocs.org/en/latest/):为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。 + * [flask-api-utils](https://github.com/marselester/flask-api-utils):为 Flask 处理 API 表示和验证。 + * [eve](https://github.com/nicolaiarocci/eve):REST API 框架,由 Flask, MongoDB 等驱动。 * Pyramid - * cornice:一个 Pyramid 的 REST 框架 。[官网](https://cornice.readthedocs.org/en/latest/) + * [cornice](https://cornice.readthedocs.org/en/latest/):一个 Pyramid 的 REST 框架 。 * 与框架无关的 - * falcon:一个用来建立云 API 和 web app 后端的高性能框架。[官网](http://falconframework.org/) - * sandman:为现存的数据库驱动系统自动创建 REST APIs 。[官网](https://github.com/jeffknupp/sandman) - * restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。[官网](http://restless.readthedocs.org/en/latest/) - * ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。[官网](https://github.com/vertical-knowledge/ripozo) + * [falcon](http://falconframework.org/):一个用来建立云 API 和 web app 后端的高性能框架。 + * [sandman](https://github.com/jeffknupp/sandman):为现存的数据库驱动系统自动创建 REST APIs 。 + * [restless](http://restless.readthedocs.org/en/latest/):框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。 + * [ripozo](https://github.com/vertical-knowledge/ripozo):快速创建 REST/HATEOAS/Hypermedia APIs。 + * [apistar](https://github.com/encode/apistar):专为Python 3设计的智能 Web API 框架。 + * [fastapi](https://github.com/tiangolo/fastapi):一个现代,快速,基于标准 Python 类型注解的的 web框架,可使用 Python3.6+ 版本构建 API。 + * [hug](https://github.com/hugapi/hug):一个为纯净公开的 API 打造的 Python 3 框架。 + * [sandman2](https://github.com/jeffknupp/sandman2):为数据库驱动的系统自动生成 REST API。 + * [vibora](https://vibora.io/):快速高效且支持异步的 Web 框架,灵感来源于 Flask。 ### 验证 实现验证方案的库。 * OAuth - * Authomatic:简单但是强大的框架,身份验证/授权客户端。[官网](http://peterhudec.github.io/authomatic/) - * django-allauth:Django 的验证应用。[官网](https://github.com/pennersr/django-allauth) - * django-oauth-toolkit:为 Django 用户准备的 OAuth2。[官网](https://github.com/evonove/django-oauth-toolkit) - * django-oauth2-provider:为 Django 应用提供 OAuth2 接入。[官网](https://github.com/caffeinehit/django-oauth2-provider) - * Flask-OAuthlib:OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。[官网](https://github.com/lepture/flask-oauthlib) - * OAuthLib:一个 OAuth 请求-签名逻辑通用、 完整的实现。[官网](https://github.com/idan/oauthlib) - * python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。[官网](https://github.com/joestump/python-oauth2) - * python-social-auth:一个设置简单的社会化验证方式。[官网](https://github.com/omab/python-social-auth) - * rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。[官网](https://github.com/litl/rauth) - * sanction:一个超级简单的 OAuth2 客户端实现。[官网](https://github.com/demianbrecht/sanction) + * [authlib](https://github.com/lepture/authlib):一个强大的Python库,用来构建 OAuth 和 OpenID 服务端。包括:JWS, JWK, JWA, JWT。 + * [Authomatic](http://peterhudec.github.io/authomatic/):简单但是强大的框架,身份验证/授权客户端。 + * [django-allauth](https://github.com/pennersr/django-allauth):Django 的验证应用。 + * [django-oauth-toolkit](https://github.com/evonove/django-oauth-toolkit):为 Django 用户准备的 OAuth2。 + * [django-oauth2-provider](https://github.com/caffeinehit/django-oauth2-provider):为 Django 应用提供 OAuth2 接入。 + * [Flask-OAuthlib](https://github.com/lepture/flask-oauthlib):OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。 + * [OAuthLib](https://github.com/idan/oauthlib):一个 OAuth 请求-签名逻辑通用、 完整的实现。 + * [python-oauth2](https://github.com/joestump/python-oauth2):一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。 + * [python-social-auth](https://github.com/omab/python-social-auth):一个设置简单的社会化验证方式。 + * [rauth](https://github.com/litl/rauth):OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。 + * [sanction](https://github.com/demianbrecht/sanction):一个超级简单的 OAuth2 客户端实现。 * 其他 - * jose:JavaScript 对象签名和加密草案的实现。[官网](https://github.com/demonware/jose) - * PyJWT:JSON Web 令牌草案 01。[官网](https://github.com/jpadilla/pyjwt) - * python-jws:JSON Web 签名草案 02 的实现。[官网](https://github.com/brianloveswords/python-jws) - * python-jwt:一个用来生成和验证 JSON Web 令牌的模块。[官网](https://github.com/davedoesdev/python-jwt) + * [PyJWT](https://github.com/jpadilla/pyjwt):JSON Web 令牌草案 01。 + * [python-jws](https://github.com/brianloveswords/python-jws):JSON Web 签名草案 02 的实现。 + * [python-jwt](https://github.com/davedoesdev/python-jwt):一个用来生成和验证 JSON Web 令牌的模块。 + * [python-jose](https://github.com/mpdavis/python-jose/):python 版 JOSE 实现。 ### 模板引擎 模板生成和词法解析的库和工具。 -* [Jinja2](http://hao.importnew.com/jinja2/):一个现代的,对设计师友好的模板引擎。[官网](https://github.com/pallets/jinja) -* Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。[官网](https://chameleon.readthedocs.org/en/latest/) -* Genshi:Python 模板工具,用以生成 web 感知的结果。[官网](https://genshi.edgewall.org/) -* Mako:Python 平台的超高速轻量级模板。[官网](http://www.makotemplates.org/) +* [Jinja2](https://github.com/pallets/jinja):一个现代的,对设计师友好的模板引擎。 +* [Chameleon](https://chameleon.readthedocs.org/en/latest/):一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。 +* [Genshi](https://genshi.edgewall.org/):Python 模板工具,用以生成 web 感知的结果。 +* [Mako](http://www.makotemplates.org/):Python 平台的超高速轻量级模板。 ### 队列 处理事件以及任务队列的库。 -* celery:一个异步任务队列/作业队列,基于分布式消息传递。[官网](http://www.celeryproject.org/) -* huey:小型多线程任务队列。[官网](https://github.com/coleifer/huey) -* [mrq](http://hao.importnew.com/mrq/):Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。[官网](https://github.com/pricingassistant/mrq) -* rq:简单的 Python 作业队列。[官网](http://python-rq.org/) -* simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。[官网](https://github.com/rdegges/simpleq) +* [celery](http://www.celeryproject.org/):一个异步任务队列/作业队列,基于分布式消息传递 +* [daramatiq](https://github.com/Bogdanp/dramatiq):适用于Python 3的快速可靠的后台任务处理库。 +* [huey](https://github.com/coleifer/huey):小型多线程任务队列。 +* [mrq](https://github.com/pricingassistant/mrq):一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。 +* [rq](http://python-rq.org/):简单的 Python 作业队列。 +* [simpleq](https://github.com/rdegges/simpleq):一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。 ### 搜索 对数据进行索引和执行搜索查询的库和软件。 -* django-haystack:Django 模块化搜索。[官网](https://github.com/django-haystack/django-haystack) -* elasticsearch-py:Elasticsearch 的官方底层 Python 客户端。[官网](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html) -* elasticsearch-dsl-py:Elasticsearch 的官方高级 Python 客户端。[官网](https://github.com/elastic/elasticsearch-dsl-py) -* solrpy:[solr](http://lucene.apache.org/solr/) 的 Python 客户端。[官网](https://github.com/edsu/solrpy) -* Whoosh:一个快速的纯 Python 搜索引擎库。[官网](http://whoosh.readthedocs.org/en/latest/) +* [django-haystack](https://github.com/django-haystack/django-haystack):Django 模块化搜索。 +* [elasticsearch-py](https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html):Elasticsearch 的官方底层 Python 客户端。 +* [elasticsearch-dsl-py](https://github.com/elastic/elasticsearch-dsl-py):Elasticsearch 的官方高级 Python 客户端。 +* [solrpy](https://github.com/edsu/solrpy):[solr](http://lucene.apache.org/solr/) 的 Python 客户端。 +* [pysolr](https://github.com/django-haystack/pysolr):支持 [Apache Solr](https://lucene.apache.org/solr/) 的轻量级 Python 装饰器。 +* [Whoosh](http://whoosh.readthedocs.org/en/latest/):一个快速的纯 Python 搜索引擎库。 ### 动态消息 用来创建用户活动的库。 -* django-activity-stream:从你的站点行为中生成通用活动信息流。[官网](https://github.com/justquick/django-activity-stream) -* Stream-Framework:使用 Cassandra 和 Redis 创建动态消息和通知系统。[官网](https://github.com/tschellenbach/Stream-Framework) +* [django-activity-stream](https://github.com/justquick/django-activity-stream):从你的站点行为中生成通用活动信息流。 +* [Stream-Framework](https://github.com/tschellenbach/Stream-Framework):使用 Cassandra 和 Redis 创建动态消息和通知系统。 -### 资源管理 +### Web 资源管理 管理、压缩、缩小网站资源的工具。 -* django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。[官网](https://github.com/django-compressor/django-compressor) -* django-storages:一个针对 Django 的自定义存储后端的工具集合。[官网](http://django-storages.readthedocs.org/en/latest/) -* fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。[官网](http://www.fanstatic.org/en/latest/) -* File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。[官网](https://wimleers.com/fileconveyor/) -* Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。[官网](http://flask-assets.readthedocs.org/en/latest/) -* jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。[官网](https://github.com/jaysonsantos/jinja-assets-compressor) -* webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。[官网](http://webassets.readthedocs.org/en/latest/) +* [django-compressor](https://github.com/django-compressor/django-compressor):将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。 +* [django-pipeline](https://github.com/jazzband/django-pipeline):Django 的资源包装库。 +* [django-storages](http://django-storages.readthedocs.org/en/latest/):一个针对 Django 的自定义存储后端的工具集合。 +* [fanstatic](http://www.fanstatic.org/en/latest/):打包、优化,并且把静态文件依赖作为 Python 的包来提供。 +* [File Conveyor](https://wimleers.com/fileconveyor/):一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。 +* [Flask-Assets](http://flask-assets.readthedocs.org/en/latest/):帮你将 web 资源整合到你的 Flask app 中。 +* [jinja-assets-compressor](https://github.com/jaysonsantos/jinja-assets-compressor):一个 Jinja 扩展,用来编译和压缩你的资源。 +* [webassets](http://webassets.readthedocs.org/en/latest/):为你的静态资源打包、优化和管理生成独一无二的缓存 URL。 ### 缓存 缓存数据的库。 -* Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python 脚本和应用上。[官网](http://beaker.readthedocs.org/en/latest/) -* django-cache-machine:Django 模型的自动缓存和失效。[官网](https://github.com/django-cache-machine/django-cache-machine) -* django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。[官网](https://github.com/Suor/django-cacheops) -* django-viewlet:渲染模板,同时具有额外的缓存控制功能。[官网](https://github.com/5monkeys/django-viewlet) -* dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。[官网](http://dogpilecache.readthedocs.org/en/latest/) -* HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。[官网](https://pypi.python.org/pypi/HermesCache) -* johnny-cache:django 应用缓存框架。[官网](https://github.com/jmoiron/johnny-cache) -* pylibmc:[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。[官网](https://github.com/lericson/pylibmc) +* [Beaker](http://beaker.readthedocs.org/en/latest/):一个缓存和会话库,可以用在 web 应用和独立 Python 脚本和应用上。 +* [django-cache-machine](https://github.com/django-cache-machine/django-cache-machine):Django 模型的自动缓存和失效。 +* [django-cacheops](https://github.com/Suor/django-cacheops):具有自动颗粒化事件驱动失效功能的 ORM。 +* [django-viewlet](https://github.com/5monkeys/django-viewlet):渲染模板,同时具有额外的缓存控制功能。 +* [dogpile.cache](http://dogpilecache.readthedocs.org/en/latest/):dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。 +* [HermesCache](https://pypi.python.org/pypi/HermesCache):Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。 +* [johnny-cache](https://github.com/jmoiron/johnny-cache):django 应用缓存框架。 +* [pylibmc](https://github.com/lericson/pylibmc):[libmemcached](http://libmemcached.org/libMemcached.html) 接口的 Python 封装。 +* [python-diskcache](http://www.grantjenks.com/docs/diskcache/):SQLite 和文件支持的缓存后端,具有比 memcached 和 redis 更快的查找速度。 ### 电子邮件 用来发送和解析电子邮件的库。 -* django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。[官网](https://github.com/StreetVoice/django-celery-ses) -* envelopes:供人类使用的电子邮件库。[官网](http://tomekwojcik.github.io/envelopes/) -* flanker:一个 email 地址和 Mime 解析库。[官网](https://github.com/mailgun/flanker) -* imbox:Python IMAP 库。[官网](https://github.com/martinrusev/imbox) -* inbox.py:Python SMTP 服务器。[官网](https://github.com/kennethreitz/inbox.py) -* inbox:一个开源电子邮件工具箱。[官网](https://github.com/nylas/sync-engine) -* lamson:Python 风格的 SMTP 应用服务器。[官网](https://github.com/zedshaw/lamson) -* mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。[官网](https://github.com/WoLpH/mailjet) -* marrow.mailer:高性能可扩展邮件分发框架。[官网](https://github.com/marrow/mailer) -* modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。[官网](https://github.com/tonioo/modoboa) -* pyzmail:创建,发送和解析电子邮件。[官网](http://www.magiksys.net/pyzmail/) -* Talon:Mailgun 库,用来抽取信息和签名。[官网](https://github.com/mailgun/talon) -* yagmail:yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。[官网](https://pypi.org/project/yagmail/) +* [django-celery-ses](https://github.com/StreetVoice/django-celery-ses):带有 AWS SES 和 Celery 的 Django email 后端。 +* [envelopes](http://tomekwojcik.github.io/envelopes/):供人类使用的电子邮件库。 +* [flanker](https://github.com/mailgun/flanker):一个 email 地址和 Mime 解析库。 +* [imbox](https://github.com/martinrusev/imbox):Python IMAP 库。 +* [inbox.py](https://github.com/kennethreitz/inbox.py):Python SMTP 服务器。 +* [inbox](https://github.com/nylas/sync-engine):一个开源电子邮件工具箱。 +* [lamson](https://github.com/zedshaw/lamson):Python 风格的 SMTP 应用服务器。 +* [mailjet](https://github.com/WoLpH/mailjet):Mailjet API 实现,用来提供批量发送邮件,统计等功能。 +* [marrow.mailer](https://github.com/marrow/mailer):高性能可扩展邮件分发框架。 +* [modoboa](https://github.com/tonioo/modoboa):一个邮件托管和管理平台,具有现代的、简约的 Web UI。 +* [pyzmail](http://www.magiksys.net/pyzmail/):创建,发送和解析电子邮件。 +* [Talon](https://github.com/mailgun/talon):Mailgun 库,用来抽取信息和签名。 +* [yagmail](https://pypi.org/project/yagmail/):yagmail是一个GMAIL / SMTP客户端,旨在使其尽可能简单地发送电子邮件。 +* [salmon](https://github.com/moggers87/salmon):一个 Python 邮件服务器。 +* [mailer](https://github.com/marrow/mailer):一款高性能可扩展的邮件投递框架。 ### 国际化 用来进行国际化的库。 -* Babel:一个 Python 的国际化库。[官网](http://babel.pocoo.org/en/latest/) -* Korean:一个韩语词态库。[官网](https://korean.readthedocs.org/en/latest/) +* [Babel](http://babel.pocoo.org/en/latest/):一个 Python 的国际化库。 +* [Korean](https://korean.readthedocs.org/en/latest/):一个韩语词态库。 +* [PyICU](https://github.com/ovalhub/pyicu):一个封装了 [ICU](http://site.icu-project.org/) C++ 库的 Python 扩展。 ### URL 处理 解析 URLs 的库 -* furl:一个让处理 URL 更简单小型 Python 库。[官网](https://github.com/gruns/furl) -* purl:一个简单的,不可变的 URL 类,具有简洁的 API 来进行询问和处理。[官网](https://github.com/codeinthehole/purl) -* pyshorteners:一个纯 Python URL 缩短库。[官网](https://github.com/ellisonleao/pyshorteners) -* shorturl:生成短小 URL 和类似 bit.ly 短链的 Python 实现。[官网](https://github.com/Alir3z4/python-shorturl) -* webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado 和 Pyramid。[官网](https://github.com/sloria/webargs) +* [furl](https://github.com/gruns/furl):一个让处理 URL 更简单小型 Python 库。 +* [purl](https://github.com/codeinthehole/purl):一个简单的,不可变的 URL 类,具有简洁的 API 来进行询问和处理。 +* [pyshorteners](https://github.com/ellisonleao/pyshorteners):一个纯 Python URL 缩短库。 +* [shorturl](https://github.com/Alir3z4/python-shorturl):生成短小 URL 和类似 bit.ly 短链的 Python 实现。 +* [webargs](https://github.com/sloria/webargs):一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado 和 Pyramid。 ### HTML 处理 处理 HTML 和 XML 的库。 -* BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。[官网](http://www.crummy.com/software/BeautifulSoup/bs4/doc/) -* bleach:一个基于白名单的 HTML 清理和文本链接库。[官网](http://bleach.readthedocs.org/en/latest/) -* cssutils:一个 Python 的 CSS 库。[官网](https://pypi.python.org/pypi/cssutils/) -* html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。[官网](https://github.com/html5lib/html5lib-python) -* lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。[官网](http://lxml.de/) -* MarkupSafe:为 Python 实现 XML/HTML/XHTML 标记安全字符串。[官网](https://github.com/pallets/markupsafe) -* pyquery:一个解析 HTML 的库,类似 jQuery。[官网](https://github.com/gawel/pyquery) -* requests-html:人性化的,Pythonic 的 HTML 解析库。[官网](https://github.com/kennethreitz/requests-html) -* untangle:将 XML 文档转换为 Python 对象,使其可以方便的访问。[官网](https://github.com/stchris/untangle) -* xhtml2pdf:HTML/CSS 转 PDF 工具。[官网](https://github.com/xhtml2pdf/xhtml2pdf) -* xmltodict:像处理 JSON 一样处理 XML。[官网](https://github.com/martinblech/xmltodict) +* [BeautifulSoup](http://www.crummy.com/software/BeautifulSoup/bs4/doc/):以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。 +* [bleach](http://bleach.readthedocs.org/en/latest/):一个基于白名单的 HTML 清理和文本链接库。 +* [cssutils](https://pypi.python.org/pypi/cssutils/):一个 Python 的 CSS 库。 +* [html5lib](https://github.com/html5lib/html5lib-python):一个兼容标准的 HTML 文档和片段解析及序列化库。 +* [lxml](http://lxml.de/):一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。 +* [MarkupSafe](https://github.com/pallets/markupsafe):为 Python 实现 XML/HTML/XHTML 标记安全字符串。 +* [pyquery](https://github.com/gawel/pyquery):一个解析 HTML 的库,类似 jQuery。 +* [requests-html](https://github.com/kennethreitz/requests-html):人性化的,Pythonic 的 HTML 解析库。 +* [untangle](https://github.com/stchris/untangle):将 XML 文档转换为 Python 对象,使其可以方便的访问。 +* [xhtml2pdf](https://github.com/xhtml2pdf/xhtml2pdf):HTML/CSS 转 PDF 工具。 +* [xmltodict](https://github.com/martinblech/xmltodict):像处理 JSON 一样处理 XML。 +* [WeasyPrint](http://weasyprint.org):用于HTML和CSS的可视化呈现引擎,并可以导出为PDF。 +* [xmldataset](https://xmldataset.readthedocs.io/en/latest/):简单 XML 解析。 爬取网络站点的库 -* Scrapy:一个快速高级的屏幕爬取及网页采集框架。[官网](http://scrapy.org/) -* ScrapydWeb:一个用于 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化,自动打包,定时器任务和邮件通知等特色功能。[官网](https://github.com/my8100/scrapydweb) -* cola:一个分布式爬虫框架。[官网](https://github.com/chineking/cola) -* Demiurge:基于 PyQuery 的爬虫微型框架。[官网](https://github.com/matiasb/demiurge) -* feedparser:通用 feed 解析器。[官网](http://pythonhosted.org/feedparser/) -* Grab:站点爬取框架。[官网](http://grablib.org/) -* MechanicalSoup:用于自动和网络站点交互的 Python 库。[官网](https://github.com/hickford/MechanicalSoup) -* portia:Scrapy 可视化爬取。[官网](https://github.com/scrapinghub/portia) -* pyspider:一个强大的爬虫系统。[官网](https://github.com/binux/pyspider) -* RoboBrowser:一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。[官网](https://github.com/jmcarp/robobrowser) +* [Scrapy](http://scrapy.org/):一个快速高级的屏幕爬取及网页采集框架。 +* [ScrapydWeb](https://github.com/my8100/scrapydweb):一个用于 Scrapyd 集群管理的全功能 web UI,支持 Scrapy 日志分析和可视化,自动打包,定时器任务和邮件通知等特色功能。 +* [cola](https://github.com/chineking/cola):一个分布式爬虫框架。 +* [Demiurge](https://github.com/matiasb/demiurge):基于 PyQuery 的爬虫微型框架。 +* [feedparser](http://pythonhosted.org/feedparser/):通用 feed 解析器。 +* [Grab](http://grablib.org/):站点爬取框架。 +* [MechanicalSoup](https://github.com/hickford/MechanicalSoup):用于自动和网络站点交互的 Python 库。 +* [portia](https://github.com/scrapinghub/portia):Scrapy 可视化爬取。 +* [pyspider](https://github.com/binux/pyspider):一个强大的爬虫系统。 +* [RoboBrowser](https://github.com/jmcarp/robobrowser):一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。 ### 网页内容提取 用于进行网页内容提取的库。 -* Haul:一个可以扩展的图像爬取工具。[官网](https://github.com/vinta/Haul) -* html2text:将 HTML 转换为 Markdown 格式文本。[官网](https://github.com/Alir3z4/html2text) -* lassie:人性化的网页内容检索库。[官网](https://github.com/michaelhelmick/lassie) -* micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。[官网](https://github.com/coleifer/micawber) -* [newspaper](http://hao.importnew.com/python-newspaper/):使用 Python 进行新闻提取,文章提取以及内容策展。[官网](https://github.com/codelucas/newspaper) -* opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。[官网](https://github.com/erikriver/opengraph) -* [python-goose](http://hao.importnew.com/python-goose/):HTML 内容/文章提取器(python2)。[官网](https://github.com/grangier/python-goose) -* [goose3](http://goose3.readthedocs.io/en/latest/index.html): HTML 内容/文章提取器(python3)。[官网](https://github.com/goose3/goose3) -* python-readability:arc90 公司 readability 工具的 Python 高速端口。[官网](https://github.com/buriy/python-readability) -* sanitize:为杂乱的数据世界带来调理性。[官网](https://github.com/Alir3z4/python-sanitize) -* sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。[官网](https://github.com/miso-belica/sumy) -* textract:从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。[官网](https://github.com/deanmalmgren/textract) +* [Haul](https://github.com/vinta/Haul):一个可以扩展的图像爬取工具。 +* [html2text](https://github.com/Alir3z4/html2text):将 HTML 转换为 Markdown 格式文本。 +* [lassie](https://github.com/michaelhelmick/lassie):人性化的网页内容检索库。 +* [micawber](https://github.com/coleifer/micawber):一个小型网页内容提取库,用来从 URLs 提取富内容。 +* [newspaper](https://github.com/codelucas/newspaper):使用 Python 进行新闻提取,文章提取以及内容策展。 +* [opengraph](https://github.com/erikriver/opengraph):一个用来解析开放内容协议(Open Graph Protocol)的 Python 模块。 +* [python-goose](https://github.com/grangier/python-goose):HTML 内容/文章提取器(python2)。 +* [goose3](https://github.com/goose3/goose3):HTML 内容/文章提取器(python3)。 +* [python-readability](https://github.com/buriy/python-readability):arc90 公司 readability 工具的 Python 高速端口。 +* [sanitize](https://github.com/Alir3z4/python-sanitize):为杂乱的数据世界带来调理性。 +* [sumy](https://github.com/miso-belica/sumy):一个为文本文件和 HTML 页面进行自动摘要的模块。 +* [textract](https://github.com/deanmalmgren/textract):从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。 ### 表单 进行表单操作的库。 -* Deform:Python HTML 表单生成库,受到了 formish 表单生成库的启发。[官网](http://deform.readthedocs.org/en/latest/) -* django-bootstrap3:集成了 Bootstrap 3 的 Django。[官网](https://github.com/dyve/django-bootstrap3) -* django-crispy-forms:一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。[官网](http://django-crispy-forms.readthedocs.org/en/latest/) -* django-remote-forms:一个平台独立的 Django 表单序列化工具。[官网](https://github.com/WiserTogether/django-remote-forms) -* WTForms:一个灵活的表单验证和呈现库。[官网](http://wtforms.readthedocs.org/en/latest/) -* WTForms-JSON:一个 WTForms 扩展,用来处理 JSON 数据。[官网](http://wtforms-json.readthedocs.org/en/latest/) +* [Deform](http://deform.readthedocs.org/en/latest/):Python HTML 表单生成库,受到了 formish 表单生成库的启发。 +* [django-bootstrap3](https://github.com/dyve/django-bootstrap3):集成了 Bootstrap 3 的 Django。 +* [django-bootstrap4](https://github.com/zostera/django-bootstrap4):集成了 Bootstrap 4 的 Django。 +* [django-crispy-forms](http://django-crispy-forms.readthedocs.org/en/latest/):一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。 +* [django-remote-forms](https://github.com/WiserTogether/django-remote-forms):一个平台独立的 Django 表单序列化工具。 +* [WTForms](http://wtforms.readthedocs.org/en/latest/):一个灵活的表单验证和呈现库。 +* [WTForms-JSON](http://wtforms-json.readthedocs.org/en/latest/):一个 WTForms 扩展,用来处理 JSON 数据。 ### 数据验证 数据验证库。多用于表单验证。 -* Cerberus:一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。[官网](http://docs.python-cerberus.org/en/stable/) -* colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。[官网](http://docs.pylonsproject.org/projects/colander/en/latest/) -* kmatch:一种用于匹配/验证/筛选 Python 字典的语言。[官网](https://github.com/ambitioninc/kmatch) -* schema:一个用于对 Python 数据结构进行验证的库。[官网](https://github.com/keleshev/schema) -* Schematics:数据结构验证。[官网](https://github.com/schematics/schematics) -* valideer:轻量级可扩展的数据验证和适配库。[官网](https://github.com/podio/valideer) -* voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。[官网](https://github.com/alecthomas/voluptuous) -* jsonschema:[JSON Schema](http://json-schema.org/)的 python 实现,用于 JSON 数据的验证。[官网](https://github.com/Julian/jsonschema) +* [Cerberus](http://docs.python-cerberus.org/en/stable/):一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。 +* [colander](http://docs.pylonsproject.org/projects/colander/en/latest/):一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。 +* [kmatch](https://github.com/ambitioninc/kmatch):一种用于匹配/验证/筛选 Python 字典的语言。 +* [schema](https://github.com/keleshev/schema):一个用于对 Python 数据结构进行验证的库。 +* [Schematics](https://github.com/schematics/schematics):数据结构验证。 +* [valideer](https://github.com/podio/valideer):轻量级可扩展的数据验证和适配库。 +* [voluptuous](https://github.com/alecthomas/voluptuous):一个 Python 数据验证库。主要是为了验证传入 Python 的 JSON,YAML 等数据。 +* [jsonschema](https://github.com/Julian/jsonschema):[JSON Schema](http://json-schema.org/) 的 python 实现,用于 JSON 数据的验证。 + +### 序列化 + +复杂数据类型序列化相关库。 + +* [marshmallow](https://github.com/marshmallow-code/marshmallow):一个轻量级的库,用于将复杂对象与简单 Python 数据类型相互转换。 +* [pysimdjson](https://github.com/TkTech/pysimdjson):与 Python 绑定的 [simdjson](https://github.com/lemire/simdjson) 。 +* [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson): [RapidJSON](https://github.com/Tencent/rapidjson) 的 Python 封装。 +* [ultrajson](https://github.com/esnme/ultrajson):使用 Python 绑定的,用 C 编写的快速 JSON 解码器和编码器。 ### 反垃圾技术 帮助你和电子垃圾进行战斗的库。 -* django-simple-captcha:一个简单、高度可定制的 Django 应用,可以为任何 Django 表单添加验证码。[官网](https://github.com/mbi/django-simple-captcha) -* django-simple-spam-blocker:一个用于 Django 的简单的电子垃圾屏蔽工具。[官网](https://github.com/moqada/django-simple-spam-blocker) +* [django-simple-captcha](https://github.com/mbi/django-simple-captcha):一个简单、高度可定制的 Django 应用,可以为任何 Django 表单添加验证码。 +* [django-simple-spam-blocker](https://github.com/moqada/django-simple-spam-blocker):一个用于 Django 的简单的电子垃圾屏蔽工具。 ### 标记 用来进行标记的库。 -* django-taggit:简单的 Django 标记工具。[官网](https://github.com/alex/django-taggit) +* [django-taggit](https://github.com/alex/django-taggit):简单的 Django 标记工具。 ### 管理面板 管理界面库。 -* Ajenti:一个你的服务器值得拥有的管理面板。[官网](https://github.com/ajenti/ajenti) -* django-suit:Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。[官网](http://djangosuit.com/) -* django-xadmin:Django admin 的一个替代品,具有很多不错的功能。[官网](https://github.com/sshwsfc/django-xadmin) -* flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。[官网](https://github.com/flask-admin/flask-admin) -* flower:一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。[官网](https://github.com/mher/flower) -* Grappelli:Django 管理界面的一个漂亮的皮肤。[官网](http://grappelliproject.com/) -* Wooey:一个 Django 应用,可以为 Python 脚本创建 web 用户界面。[官网](https://github.com/wooey/wooey) +* [Ajenti](https://github.com/ajenti/ajenti):一个你的服务器值得拥有的管理面板。 +* [django-suit](http://djangosuit.com/):Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。 +* [django-xadmin](https://github.com/sshwsfc/django-xadmin):Django admin 的一个替代品,具有很多不错的功能。 +* [flask-admin](https://github.com/flask-admin/flask-admin):一个用于 Flask 的简单可扩展的管理界面框架。 +* [flower](https://github.com/mher/flower):一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。 +* [Grappelli](http://grappelliproject.com/):Django 管理界面的一个漂亮的皮肤。 +* [Wooey](https://github.com/wooey/wooey):一个 Django 应用,可以为 Python 脚本创建 web 用户界面。 +* [django-grappelli](https://grappelliproject.com/):拥有绚丽外观的 Django Admin 界面。 +* [django-jet](https://github.com/geex-arts/django-jet):具有改进功能的现代响应式 Django 管理界面模板。 +* [jet-bridge](https://github.com/jet-admin/jet-bridge):管理面板框架,适用于任何具有良好 UI 的应用(例如 Django)。 + +### Serverless 框架 + +使用 Python 开发 Serverless 模型相关的库。 + +* [python-lambda](https://github.com/nficano/python-lambda) :在 AWS Lambda 开发和部署 Python 代码的工具包。 +* [Zappa](https://github.com/Miserlou/Zappa):在 AWS Lambda 和 API Gateway 部署 WSGI 应用的工具。 ### 静态站点生成器 静态站点生成器是一个软件,它把文本和模板作为输入,然后输出 HTML 文件。 -* Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。[官网](http://blog.getpelican.com/) -* Cactus:为设计师设计的静态站点生成器。[官网](https://github.com/koenbok/Cactus/) -* Hyde:基于 Jinja2 的静态站点生成器。[官网](http://hyde.github.io/) -* Nikola:一个静态网站和博客生成器。[官网](https://www.getnikola.com/) -* Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。[官网](http://tinkerer.me/) -* Lektor:一个简单易用的静态 CMS 和博客引擎。[官网](https://www.getlektor.com/) +* [Pelican](http://blog.getpelican.com/):使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。 +* [Cactus](https://github.com/koenbok/Cactus/):为设计师设计的静态站点生成器。 +* [Hyde](http://hyde.github.io/):基于 Jinja2 的静态站点生成器。 +* [Nikola](https://www.getnikola.com/):一个静态网站和博客生成器。 +* [Tinkerer](http://tinkerer.me/):Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。 +* [Lektor](https://www.getlektor.com/):一个简单易用的静态 CMS 和博客引擎。 +* [makesite](https://github.com/sunainapai/makesite):简单轻量的站点/博客生成器 (小于 130 行代码)。 ### 进程 操作系统进程启动及通信库。 -* envoy:比 Python [subprocess](https://docs.python.org/2/library/subprocess.html) 模块更人性化。[官网](https://github.com/kennethreitz/envoy) -* sarge:另一 种 subprocess 模块的封装。[官网](http://sarge.readthedocs.org/en/latest/) -* sh:一个完备的 subprocess 替代库。[官网](https://github.com/amoffat/sh) +* [envoy](https://github.com/kennethreitz/envoy):比 Python [subprocess](https://docs.python.org/2/library/subprocess.html) 模块更人性化。 +* [sarge](http://sarge.readthedocs.org/en/latest/):另一 种 subprocess 模块的封装。 +* [sh](https://github.com/amoffat/sh):一个完备的 subprocess 替代库。 +* [delegator.py](https://github.com/amitt001/delegator.py):人性化的 [Subprocesses](https://docs.python.org/3/library/subprocess.html) 2.0 版本。 ### 并发和并行 用以进行并发和并行操作的库。 -* multiprocessing:(Python 标准库) 基于进程的“线程”接口。[官网](https://docs.python.org/2/library/multiprocessing.html) -* threading:(Python 标准库)更高层的线程接口。[官网](https://docs.python.org/2/library/threading.html) -* eventlet:支持 WSGI 的异步框架。[官网](http://eventlet.net/) -* gevent:一个基于协程的 Python 网络库,使用 [greenlet](https://github.com/python-greenlet/greenlet)。[官网](http://www.gevent.org/) -* Tomorrow:用于产生异步代码的神奇的装饰器语法实现。[官网](https://github.com/madisonmay/Tomorrow) -* uvloop:在 libuv 之上超快速实现 asyncio 事件循环。[官网](https://github.com/MagicStack/uvloop) +* [multiprocessing](https://docs.python.org/2/library/multiprocessing.html):(Python 标准库) 基于进程的“线程”接口。 +* [threading](https://docs.python.org/2/library/threading.html):(Python 标准库)更高层的线程接口。 +* [eventlet](http://eventlet.net/):支持 WSGI 的异步框架。 +* [gevent](http://www.gevent.org/):一个基于协程的 Python 网络库,使用 [greenlet](https://github.com/python-greenlet/greenlet)。 +* [Tomorrow](https://github.com/madisonmay/Tomorrow):用于产生异步代码的神奇的装饰器语法实现。 +* [uvloop](https://github.com/MagicStack/uvloop):在 libuv 之上超快速实现 asyncio 事件循环。 +* [concurrent.futures](https://docs.python.org/3/library/concurrent.futures.html):(Python 标准库) 异步执行可调用对象的高级接口。 +* [gevent](http://www.gevent.org/):使用 [greenlet](https://github.com/python-greenlet/greenlet) 且基于协程的 Python 网络库。 +* [scoop](https://github.com/soravux/scoop):支持在 Python 中进行可伸缩并行操作。 ### 网络 用于网络编程的库。 -* asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。[官网](https://docs.python.org/3/library/asyncio.html) -* [Twisted](http://hao.importnew.com/twisted/):一个事件驱动的网络引擎。[官网](https://twistedmatrix.com/trac/) -* pulsar:事件驱动的并发框架。[官网](https://github.com/quantmind/pulsar) -* diesel:基于 Greenlet 的事件 I/O 框架。[官网](https://github.com/dieseldev/diesel) -* pyzmq:一个 ZeroMQ 消息库的 Python 封装。[官网](http://zeromq.github.io/pyzmq/) -* Toapi:一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。[官网](https://github.com/gaojiuli/toapi) -* txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。[官网](https://github.com/smira/txZMQ) +* [asyncio](https://docs.python.org/3/library/asyncio.html):(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。 +* [trio](https://github.com/python-trio/trio):异步并发和 I/O 友好的库。 +* [Twisted](https://twistedmatrix.com/trac/):一个事件驱动的网络引擎。 +* [pulsar](https://github.com/quantmind/pulsar):事件驱动的并发框架。 +* [diesel](https://github.com/dieseldev/diesel):基于 Greenlet 的事件 I/O 框架。 +* [pyzmq](http://zeromq.github.io/pyzmq/):一个 ZeroMQ 消息库的 Python 封装。 +* [Toapi](https://github.com/gaojiuli/toapi):一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。 +* [txZMQ](https://github.com/smira/txZMQ):基于 Twisted 的 ZeroMQ 消息库的 Python 封装。 ### WebSocket 帮助使用 WebSocket 的库。 -* AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。[官网](https://github.com/crossbario/autobahn-python) -* Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn)。[官网](https://github.com/crossbario/crossbar/) -* django-socketio:给 Django 用的 WebSockets。[官网](https://github.com/stephenmcd/django-socketio) -* WebSocket-for-Python:为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。[官网](https://github.com/Lawouach/WebSocket-for-Python) +* [AutobahnPython](https://github.com/crossbario/autobahn-python):给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。 +* [Crossbar](https://github.com/crossbario/crossbar/):开源统一应用路由(Websocket & WAMP for Python on Autobahn)。 +* [django-socketio](https://github.com/stephenmcd/django-socketio):给 Django 用的 WebSockets。 +* [WebSocket-for-Python](https://github.com/Lawouach/WebSocket-for-Python):为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。 ### WSGI 服务器 兼容 WSGI 的 web 服务器 -* gunicorn:Pre-forked, 部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/gunicorn) -* uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。[官网](https://uwsgi-docs.readthedocs.org/en/latest/) -* [bjoern](http://hao.importnew.com/bjoern/):异步,非常快速,由 C 语言编写。[官网](https://pypi.python.org/pypi/bjoern) -* fapws3:异步 (仅对于网络端),由 C 语言编写。[官网](http://www.fapws.org/) -* meinheld:异步,部分是由 C 语言编写的。[官网](https://pypi.python.org/pypi/meinheld) -* netius:异步,非常快速。[官网](https://github.com/hivesolutions/netius) -* paste:多线程,稳定,久经考验。[官网](http://pythonpaste.org/) -* rocket:多线程。[官网](https://pypi.python.org/pypi/rocket) -* waitress:多线程, 是它驱动着 Pyramid 框架。[官网](https://waitress.readthedocs.org/en/latest/) -* Werkzeug:一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。[官网](http://werkzeug.pocoo.org/) +* [gunicorn](https://pypi.python.org/pypi/gunicorn):Pre-forked, 部分是由 C 语言编写的。 +* [uwsgi](https://uwsgi-docs.readthedocs.org/en/latest/):uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。 +* [bjoern](https://pypi.python.org/pypi/bjoern):异步,非常快速,由 C 语言编写。 +* [fapws3](http://www.fapws.org/):异步 (仅对于网络端),由 C 语言编写。 +* [meinheld](https://pypi.python.org/pypi/meinheld):异步,部分是由 C 语言编写的。 +* [netius](https://github.com/hivesolutions/netius):异步,非常快速。 +* [paste](http://pythonpaste.org/):多线程,稳定,久经考验。 +* [rocket](https://pypi.python.org/pypi/rocket):多线程。 +* [waitress](https://waitress.readthedocs.org/en/latest/):多线程, 是它驱动着 Pyramid 框架。 +* [Werkzeug](http://werkzeug.pocoo.org/):一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。 + +### ASGI 服务器 + +兼容 ASGI 的 web 服务器。 + +* [daphne](https://github.com/django/daphne):用于 ASGI 和 ASGI-HTTP 的,支持 HTTP,HTTP2 和 WebSocket 协议的服务器。 +* [uvicorn](https://github.com/encode/uvicorn):使用 uvloop 和 httptools 实现的闪电般快速的 ASGI 服务器。 ### RPC 服务器 兼容 RPC 的服务器。 -* SimpleJSONRPCServer:这个库是 JSON-RPC 规范的一个实现。[官网](https://github.com/joshmarshall/jsonrpclib/) -* SimpleXMLRPCServer:(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。[官网](https://docs.python.org/2/library/simplexmlrpcserver.html) -* zeroRPC:zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。[官网](https://github.com/0rpc/zerorpc-python) +* [SimpleJSONRPCServer](https://github.com/joshmarshall/jsonrpclib/):这个库是 JSON-RPC 规范的一个实现。 +* [SimpleXMLRPCServer](https://docs.python.org/2/library/simplexmlrpcserver.html):(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。 +* [zeroRPC](https://github.com/0rpc/zerorpc-python):zerorpc 是一个灵活的 RPC 实现,基于 [ZeroMQ](http://zeromq.org/) 和 [MessagePack](http://msgpack.org/)。 +* [RPyC](https://github.com/tomerfiliba/rpyc) (Remote Python Call):适用于 Python 的透明且对称的RPC库。 ### 密码学 -* cryptography:这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。[官网](https://cryptography.io/en/latest/) -* hashids:在 Python 中实现 [hashids](http://hashids.org/) 。[官网](https://github.com/davidaurelio/hashids-python) -* Paramiko:SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。[官网](http://www.paramiko.org/) -* Passlib:安全密码存储/哈希库,[官网](https://pythonhosted.org/passlib/) -* PyCrypto:Python 密码学工具箱。[官网](https://www.dlitz.net/software/pycrypto/) -* PyNacl:网络和密码学(NaCl) 库的 Python 绑定。[官网](https://github.com/pyca/pynacl) +* [cryptography](https://cryptography.io/en/latest/):这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。 +* [hashids](https://github.com/davidaurelio/hashids-python):在 Python 中实现 [hashids](http://hashids.org/) 。 +* [Paramiko](http://www.paramiko.org/):SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。 +* [Passlib](https://pythonhosted.org/passlib/):安全密码存储/哈希库。 +* [PyCrypto](https://www.dlitz.net/software/pycrypto/):Python 密码学工具箱。 +* [PyNacl](https://github.com/pyca/pynacl):网络和密码学(NaCl) 库的 Python 绑定。 ### 图形用户界面 用来创建图形用户界面程序的库。 -* curses:内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。[官网](https://docs.python.org/2/library/curses.html#module-curses) -* enaml:使用类似 QML 的 Declaratic 语法来创建美观的用户界面。[官网](https://github.com/nucleic/enaml) -* [kivy](http://hao.importnew.com/kivy/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。[官网](https://kivy.org/) -* pyglet:一个 Python 的跨平台窗口及多媒体库。[官网](https://bitbucket.org/pyglet/pyglet/wiki/Home) -* PyQt:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。[官网](https://riverbankcomputing.com/software/pyqt/intro) -* PySide:跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。[官网](https://wiki.qt.io/PySide) -* Tkinter:Tkinter 是 Python GUI 的一个事实标准库。[官网](https://wiki.python.org/moin/TkInter) -* Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。[官网](https://github.com/pybee/toga) -* urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。[官网](http://urwid.org/) -* wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。[官网](http://wxpython.org/) -* PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。[官网](https://wiki.gnome.org/Projects/PyGObject) -* Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。[官网](https://github.com/zoofIO/flexx) +* [curses](https://docs.python.org/2/library/curses.html#module-curses):内建的 [ncurses](http://www.gnu.org/software/ncurses/) 封装,用来创建终端图形用户界面。 +* [enaml](https://github.com/nucleic/enaml):使用类似 QML 的 Declaratic 语法来创建美观的用户界面。 +* [kivy](https://kivy.org/):一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS 平台上。 +* [pyglet](https://bitbucket.org/pyglet/pyglet/wiki/Home):一个 Python 的跨平台窗口及多媒体库。 +* [PyQt](https://riverbankcomputing.com/software/pyqt/intro):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。 +* [PySide](https://wiki.qt.io/PySide):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。 +* [Tkinter](https://wiki.python.org/moin/TkInter):Tkinter 是 Python GUI 的一个事实标准库。 +* [Toga](https://github.com/pybee/toga):一个 Python 原生的, 操作系统原生的 GUI 工具包。 +* [urwid](http://urwid.org/):一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。 +* [wxPython](http://wxpython.org/):wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。 +* [PyGObject](https://wiki.gnome.org/Projects/PyGObject):GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。 +* [Flexx](https://github.com/zoofIO/flexx):Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。 +* [Eel](https://github.com/ChrisKnott/Eel):用于制作简单离线 HTML/JS GUI 应用的库。 +* [PySimpleGUI](https://github.com/PySimpleGUI/PySimpleGUI):tkinter,Qt,WxPython 和 Remi 的封装。 +* [pywebview](https://github.com/r0x0r/pywebview/):围绕网页视图组件的轻量级跨平台的原生包装。 +* [DearPyGui](https://github.com/RaylockLLC/DearPyGui/):一个简单的可使用 GPU 加速的 Python GUI 框架。 ### 游戏开发 超赞的游戏开发库。 -* Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。[官网](http://cocos2d.org/) -* Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用 C++ 编写, 针对 Python 进行了完全的封装。[官网](https://www.panda3d.org/) -* Pygame:Pygame 是一组 Python 模块,用来编写游戏。[官网](http://www.pygame.org/news.html) -* PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。[官网](http://www.ogre3d.org/tikiwiki/PyOgre) -* PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。[官网](http://pyopengl.sourceforge.net/) -* PySDL2:SDL2 库的封装,基于 ctypes。[官网](http://pysdl2.readthedocs.org/en/latest/) -* RenPy:一个视觉小说(visual novel)引擎。[官网](https://www.renpy.org/) +* [Cocos2d](http://cocos2d.org/):cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。 +* [Panda3D](https://www.panda3d.org/):由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用 C++ 编写, 针对 Python 进行了完全的封装。 +* [Pygame](http://www.pygame.org/news.html):Pygame 是一组 Python 模块,用来编写游戏。 +* [PyOgre](http://www.ogre3d.org/tikiwiki/PyOgre):Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。 +* [PyOpenGL](http://pyopengl.sourceforge.net/):OpenGL 的 Python 绑定及其相关 APIs。 +* [PySDL2](http://pysdl2.readthedocs.org/en/latest/):SDL2 库的封装,基于 ctypes。 +* [RenPy](https://www.renpy.org/):一个视觉小说(visual novel)引擎。 +* [Arcade](https://arcade.academy/index.html):一个现代 Python 框架,用于制作具有引人入胜的图形与声音的游戏。 +* [Harfang3D](http://www.harfang3d.com):支持3D,VR 与游戏开发的 Python 框架。 ### 日志 用来生成和操作日志的库。 -* logging:(Python 标准库) 为 Python 提供日志功能。[官网](https://docs.python.org/2/library/logging.html) -* logbook:Logging 库的替代品。[官网](http://pythonhosted.org/Logbook/) -* Eliot:为复杂的和分布式系统创建日志。[官网](https://eliot.readthedocs.org/en/latest/) -* Raven:Sentry 的 Python 客户端。[官网](http://raven.readthedocs.org/en/latest/) -* Sentry:实时记录和收集日志的服务器。[官网](https://pypi.python.org/pypi/sentry) +* [logging](https://docs.python.org/2/library/logging.html):(Python 标准库) 为 Python 提供日志功能。 +* [logbook](http://pythonhosted.org/Logbook/):Logging 库的替代品。 +* [Eliot](https://eliot.readthedocs.org/en/latest/):为复杂的和分布式系统创建日志。 +* [Raven](http://raven.readthedocs.org/en/latest/):Sentry 的 Python 客户端。 +* [Sentry](https://pypi.python.org/pypi/sentry):实时记录和收集日志的服务器。 +* [sentry-python](https://github.com/getsentry/sentry-python):Python 版 Sentry SDK。 +* [loguru](https://github.com/Delgan/loguru):旨在带来愉悦体验的 Python 日志库。 +* [structlog](https://www.structlog.org/en/stable/):结构化日志,让日志变得简单。 ### 测试 进行代码库测试和生成测试数据的库。 * 测试框架 - * unittest:(Python 标准库) 单元测试框架。[官网](https://docs.python.org/2/library/unittest.html) - * nose:nose 扩展了 unittest 的功能。[官网](https://nose.readthedocs.org/en/latest/) - * contexts:一个 Python 3.3+ 的 BDD 框架。受到 C# – Machine.Specifications 的启发。[官网](https://github.com/benjamin-hodgson/Contexts) - * hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。[官网](https://github.com/DRMacIver/hypothesis) - * mamba:Python 的终极测试工具, 拥护 BDD。[官网](http://nestorsalceda.github.io/mamba/) - * PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。[官网](https://github.com/asweigart/pyautogui) - * pyshould:Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。[官网](https://github.com/drslump/pyshould) - * pytest:一个成熟的全功能 Python 测试工具。[官网](http://pytest.org/latest/) - * green:干净,多彩的测试工具。[官网](https://github.com/CleanCut/green) - * pyvows:BDD 风格的测试工具,受 Vows.js 的启发。[官网](http://heynemann.github.io/pyvows/) - * Robot Framework:一个通用的自动化测试框架。[官网](https://github.com/robotframework/robotframework) -* Web 测试 - * Selenium:[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。[官网](https://pypi.python.org/pypi/selenium) - * locust:使用 Python 编写的,可扩展的用户加载测试工具。[官网](https://github.com/locustio/locust) - * sixpack:一个和语言无关的 A/B 测试框架。[官网](https://github.com/seatgeek/sixpack) - * splinter:开源的 web 应用测试工具。[官网](https://splinter.readthedocs.org/en/latest/) + * [unittest](https://docs.python.org/2/library/unittest.html):(Python 标准库) 单元测试框架。 + * [nose](https://nose.readthedocs.org/en/latest/):nose 扩展了 unittest 的功能。 + * [nose2](https://github.com/nose-devs/nose2) `nose`的继任者,基于 `unittest2`。 + * [contexts](https://github.com/benjamin-hodgson/Contexts):一个 Python 3.3+ 的 BDD 框架。受到 C# Machine.Specifications 的启发。 + * [hypothesis](https://github.com/DRMacIver/hypothesis):Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。 + * [mamba](http://nestorsalceda.github.io/mamba/):Python 的终极测试工具, 拥护 BDD。 + * [pyshould](https://github.com/drslump/pyshould):Should 风格的断言,基于 [PyHamcrest](https://github.com/hamcrest/PyHamcrest)。 + * [pytest](http://pytest.org/latest/):一个成熟的全功能 Python 测试工具。 + * [green](https://github.com/CleanCut/green):干净,多彩的测试工具。 + * [pyvows](http://heynemann.github.io/pyvows/):BDD 风格的测试工具,受 Vows.js 的启发。 + * [Robot Framework](https://github.com/robotframework/robotframework):一个通用的自动化测试框架。 + * [tox](https://tox.readthedocs.io/en/latest/):自动化测试与发布的工具,支持多个 Python 版本。 +* GUI / Web 测试 + * [Selenium](https://pypi.python.org/pypi/selenium):[Selenium](http://www.seleniumhq.org/) WebDriver 的 Python 绑定。 + * [PyAutoGUI](https://github.com/asweigart/pyautogui):PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。 + * [locust](https://github.com/locustio/locust):使用 Python 编写的,可扩展的用户加载测试工具。 + * [sixpack](https://github.com/seatgeek/sixpack):一个和语言无关的 A/B 测试框架。 + * [splinter](https://splinter.readthedocs.org/en/latest/):开源的 web 应用测试工具。 + * [Schemathesis](https://github.com/kiwicom/schemathesis):基于属性的自动测试工具,用于测试使用 Open API / Swagger 规范构建的 Web 应用程序。 * Mock 测试 - * mock:(Python 标准库) 一个用于伪造测试的库。[官网](https://docs.python.org/3/library/unittest.mock.html) - * doublex:Python 的一个功能强大的 doubles  测试框架。[官网](https://pypi.python.org/pypi/doublex) - * freezegun:通过伪造日期模块来生成不同的时间。[官网](https://github.com/spulec/freezegun) - * httmock:针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。[官网](https://github.com/patrys/httmock) - * httpretty:Python 的 HTTP 请求 mock 工具。[官网](http://falcao.it/HTTPretty/) - * responses:伪造 Python 中的 requests 库的一个通用库。[官网](https://github.com/getsentry/responses) - * VCR.py:在你的测试中记录和重放 HTTP 交互。[官网](https://github.com/kevin1024/vcrpy) + * [mock](https://docs.python.org/3/library/unittest.mock.html):(Python 标准库) 一个用于伪造测试的库。 + * [doublex](https://pypi.python.org/pypi/doublex):Python 的一个功能强大的 doubles 测试框架。 + * [freezegun](https://github.com/spulec/freezegun):通过伪造日期模块来生成不同的时间。 + * [httmock](https://github.com/patrys/httmock):针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。 + * [httpretty](http://falcao.it/HTTPretty/):Python 的 HTTP 请求 mock 工具。 + * [responses](https://github.com/getsentry/responses):伪造 Python 中的 requests 库的一个通用库。 + * [VCR.py](https://github.com/kevin1024/vcrpy):在你的测试中记录和重放 HTTP 交互。 + * [mocket](https://github.com/mindflayer/python-mocket):gevent/asyncio/SSL 支持的 socket mock 框架。 * 对象工厂 - * factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。[官网](https://github.com/rbarrois/factoryboy) - * mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。[官网](https://github.com/klen/mixer) - * modelmommy:为 Django 测试创建随机固件。[官网](https://github.com/vandersonmota/modelmommy) + * [factoryboy](https://github.com/rbarrois/factoryboy):一个 Python 用的测试固件 (test fixtures) 替代库。 + * [mixer](https://github.com/klen/mixer):另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。 + * [modelmommy](https://github.com/vandersonmota/modelmommy):为 Django 测试创建随机固件。 * 代码覆盖率 - * coverage:代码覆盖率测量。[官网](https://pypi.python.org/pypi/coverage) - * Codecov:一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。[官网](https://codecov.io/) + * [coverage](https://pypi.python.org/pypi/coverage):代码覆盖率测量。 + * [Codecov](https://codecov.io/):一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。 * 伪数据 - * faker:一个 Python 库,用来生成伪数据。[官网](http://www.joke2k.net/faker/) - * fake2db:伪数据库生成器。[官网](https://github.com/emirozer/fake2db) - * radar:生成随机的日期/时间。[官网](https://pypi.python.org/pypi/radar) + * [faker](http://www.joke2k.net/faker/):一个 Python 库,用来生成伪数据。 + * [fake2db](https://github.com/emirozer/fake2db):伪数据库生成器。 + * [mimesis](https://github.com/lk-geimfari/mimesis):一个帮助你生成伪数据的 Python 库。 + * [radar](https://pypi.python.org/pypi/radar):生成随机的日期/时间。 * 错误处理 - * FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。[官网](https://github.com/ajalt/fuckitpy) + * [FuckIt.py](https://github.com/ajalt/fuckitpy):使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。 + +### 渗透测试 + +渗透测试相关框架和工具。 + +* [fsociety](https://github.com/Manisso/fsociety):一款渗透测试框架。 +* [setoolkit](https://github.com/trustedsec/social-engineer-toolkit):社会工程工具包。 +* [sqlmap](https://github.com/sqlmapproject/sqlmap):自动 SQL 注入和数据库接管工具。 ### 代码分析和 Lint 工具 -进行代码分析,解析和操作代码库的库和工具。 +进行代码分析、解析和操作代码库的库和工具。 * 代码分析 - * coala:语言独立和易于扩展的代码分析应用程序。[官网](http://coala-analyzer.org/) - * code2flow:把你的 Python 和 JavaScript 代码转换为流程图。[官网](https://github.com/scottrogowski/code2flow) - * pycallgraph:这个库可以把你的 Python 应用的流程(调用图)进行可视化。[官网](https://github.com/gak/pycallgraph) - * pysonar2:Python 类型推断和检索工具。[官网](https://github.com/yinwang0/pysonar2) -* Lint 工具 - * Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。[官网](https://pypi.python.org/pypi/flake8) - * Pylint:一个完全可定制的源码分析器。[官网](https://www.pylint.org/) - * YAPF: Google 的 Python 代码格式化工具。[官网](https://github.com/google/yapf) - * pylama:Python 和 JavaScript 的代码审查工具。[官网](https://pylama.readthedocs.org/en/latest/) + * [coala](http://coala-analyzer.org/):语言独立和易于扩展的代码分析应用程序。 + * [code2flow](https://github.com/scottrogowski/code2flow):把你的 Python 和 JavaScript 代码转换为流程图。 + * [pycallgraph](https://github.com/gak/pycallgraph):这个库可以把你的 Python 应用的流程(调用图)进行可视化。 + * [pysonar2](https://github.com/yinwang0/pysonar2):Python 类型推断和检索工具。 + * [prospector](https://github.com/PyCQA/prospector):分析 Python 代码的工具。 + * [vulture](https://github.com/jendrikseipp/vulture):用于发现和分析无效 Python 代码的工具。 + +* Lint 工具 + * [Flake8](https://pypi.python.org/pypi/flake8):模块化源码检查工具,提供与 `pycodestyle`、`pyflakes` 、McCabe 相关的装饰器。 + * [awesome-flake8-extensions](https://github.com/DmytroLitvinov/awesome-flake8-extensions) + + * [Pylint](https://www.pylint.org/):一个完全可定制的源码分析器。 + * [YAPF](https://github.com/google/yapf):Google 的 Python 代码格式化工具。 + * [pylama](https://pylama.readthedocs.org/en/latest/):Python 和 JavaScript 的代码审查工具。 + * [wemake-python-styleguide](https://github.com/wemake-services/wemake-python-styleguide):有史以来最严格的 Python 代码审查工具。 + * 代码格式化 - * autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。[官网](https://github.com/hhatto/autopep8) - * black:一个坚定的 Python 代码格式化工具。[官网](https://github.com/ambv/black) + * [autopep8](https://github.com/hhatto/autopep8):自动格式化 Python 代码,以使其符合 PEP8 规范。 + * [black](https://github.com/ambv/black):一个坚定的 Python 代码格式化工具。 + * [isort](https://github.com/timothycrosley/isort):用于纠正包导入顺序的 Python 库。 + +* 静态类型检查,也可以参考 [awesome-python-typing](https://github.com/typeddjango/awesome-python-typing) + + * [mypy](http://mypy-lang.org/):在编译期间检查变量类型。 + * [pyre-check](https://github.com/facebook/pyre-check):性能类型检查。 + * [typeshed](https://github.com/python/typeshed):带有静态类型的Python库存根的集合。 + +* 静态类型注释生成器 + + * [MonkeyType](https://github.com/Instagram/MonkeyType):通过收集运行时的类型来为 Python 生成静态类型注释的系统。 + * [pyannotate](https://github.com/dropbox/pyannotate):自动生成符合 PEP-484 的注解。 + * [pytype](https://github.com/google/pytype):检查和推断 Python 代码中的类型,无需添加注解。 ### 调试工具 用来进行代码调试的库。 * 调试器 - * ipdb:IPython 启用的 [pdb](https://docs.python.org/2/library/pdb.html)。[官网](https://pypi.python.org/pypi/ipdb) - * pudb:全屏,基于控制台的 Python 调试器。[官网](https://pypi.python.org/pypi/pudb) - * pyringe:可以在 Python 进程中附加和注入代码的调试器。[官网](https://github.com/google/pyringe) - * wdb:一个奇异的 web 调试器,通过 WebSockets 工作。[官网](https://github.com/Kozea/wdb) - * winpdb:一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。[官网](http://winpdb.org/) - * django-debug-toolbar:为 Django 显示各种调试信息。[官网](https://github.com/django-debug-toolbar/django-debug-toolbar) - * django-devserver:一个 Django 运行服务器的替代品。[官网](https://github.com/dcramer/django-devserver) - * flask-debugtoolbar:django-debug-toolbar 的 flask 版。[官网](https://github.com/mgood/flask-debugtoolbar) + * [ipdb](https://pypi.python.org/pypi/ipdb):IPython 启用的 [pdb](https://docs.python.org/2/library/pdb.html)。 + * [pudb](https://pypi.python.org/pypi/pudb):全屏,基于控制台的 Python 调试器。 + * [pdb++](https://github.com/antocuni/pdb):另一种 pdb 的替代。 + * [pyringe](https://github.com/google/pyringe):可以在 Python 进程中附加和注入代码的调试器。 + * [wdb](https://github.com/Kozea/wdb):一个奇异的 web 调试器,通过 WebSockets 工作。 + * [winpdb](http://winpdb.org/):一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。 +* 追踪器 + * [lptrace](https://github.com/khamidou/lptrace):为 Python 程序打造的 [strace](http://man7.org/linux/man-pages/man1/strace.1.html)。 + * [manhole](https://github.com/ionelmc/python-manhole):调试UNIX套接字连接,并显示所有线程的堆栈跟踪和交互式提示。 + * [pyringe](https://github.com/google/pyringe):能够附加到 Python 进程并将代码注入Python进程的调试器。 + * [python-hunter](https://github.com/ionelmc/python-hunter):一个灵活的代码追踪工具包。 + * 性能分析器 - * lineprofiler:逐行性能分析。[官网](https://github.com/rkern/lineprofiler) - * [Memory Profiler](http://hao.importnew.com/memory_profiler/):监控 Python 代码的内存使用。[官网](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler) - * profiling:一个交互式 Python 性能分析工具。[官网](https://github.com/what-studio/profiling) + * [lineprofiler](https://github.com/rkern/lineprofiler):逐行性能分析。 + * [Memory Profiler](http://pypi.python.org/pypi/memory_profiler)、[内存](https://github.com/fabianp/memoryprofiler):监控 Python 代码的内存使用。 + * [profiling](https://github.com/what-studio/profiling):一个交互式 Python 性能分析工具。 + * [py-spy](https://github.com/benfred/py-spy):Python 程序采样分析器,使用 Rust 实现。 + * [pyflame](https://github.com/uber/pyflame):用于 Python 的跟踪分析器。 + * [vprof](https://github.com/nvdv/vprof):视觉 Python 分析器。 * 其他 - * pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。[官网](https://github.com/eliben/pyelftools) - * python-statsd:[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。[官网](https://github.com/WoLpH/python-statsd) + * [pyelftools](https://github.com/eliben/pyelftools):解析和分析 ELF 文件以及 DWARF 调试信息。 + * [python-statsd](https://github.com/WoLpH/python-statsd):[statsd](https://github.com/etsy/statsd/) 服务器的 Python 客户端。 + * [django-debug-toolbar](https://github.com/django-debug-toolbar/django-debug-toolbar):为 Django 显示各种调试信息。 + * [django-devserver](https://github.com/dcramer/django-devserver):一个 Django 运行服务器的替代品。 + * [flask-debugtoolbar](https://github.com/mgood/flask-debugtoolbar):django-debug-toolbar 的 flask 版。 + * [icecream](https://github.com/gruns/icecream):通过一个简单的函数调用检查变量、表达式和程序执行情况。 ### 科学计算和数据分析 用来进行科学计算和数据分析的库。 -* astropy:一个天文学 Python 库。[官网](http://www.astropy.org/) -* [bcbio-nextgen](http://hao.importnew.com/bcbio-nextgen/):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。[官网](https://github.com/chapmanb/bcbio-nextgen) -* bccb:生物分析相关代码集合。[官网](https://github.com/chapmanb/bcbb) -* Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。[官网](http://biopython.org/wiki/MainPage) -* [blaze](http://hao.importnew.com/blaze/):NumPy 和 Pandas 的大数据接口。[官网](http://blaze.readthedocs.org/en/latest/index.html) -* [cclib](http://hao.importnew.com/cclib/):一个用来解析和解释计算化学软件包输出结果的库。[官网](http://cclib.github.io/) -* NetworkX:一个为复杂网络设计的高性能软件。[官网](https://networkx.github.io/) -* Neupy:执行和测试各种不同的人工神经网络算法。[官网](http://neupy.com/pages/home.html) -* Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。[官网](http://numba.pydata.org/) -* [NumPy](http://hao.importnew.com/numpy/):使用 Python 进行科学计算的基础包。[官网](http://www.numpy.org/) -* Open Babel:一个化学工具箱,用来描述多种化学数据。[官网](http://openbabel.org/wiki/MainPage) -* [Open Mining](http://hao.importnew.com/open-mining/):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。[官网](https://github.com/mining/mining) -* [orange](http://hao.importnew.com/orange/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。[官网](http://orange.biolab.si/) -* Pandas:提供高性能,易用的数据结构和数据分析工具。[官网](http://pandas.pydata.org/) -* PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。[官网](http://www.pydy.org/) -* [PyMC](http://hao.importnew.com/pymc/):马尔科夫链蒙特卡洛采样工具。[官网](https://github.com/pymc-devs/pymc3) -* RDKit:化学信息学和机器学习软件。[官网](http://www.rdkit.org/) -* [SciPy](http://hao.importnew.com/scipy/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。[官网](http://www.scipy.org/) -* [statsmodels](http://hao.importnew.com/statsmodels/):统计建模和计量经济学。[官网](https://github.com/statsmodels/statsmodels) -* SymPy:一个用于符号数学的 Python 库。[官网](https://github.com/sympy/sympy) -* zipline:一个 Python 算法交易库。[官网](https://github.com/quantopian/zipline) -* [Bayesian-belief-networks](http://hao.importnew.com/bayesian-belief-networks/):优雅的贝叶斯信念网络框架。[官网](https://github.com/eBay/bayesian-belief-networks) +* [astropy](http://www.astropy.org/):一个天文学 Python 库。 +* [bcbio-nextgen](https://github.com/chapmanb/bcbio-nextgen):这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。 +* [bccb](https://github.com/chapmanb/bcbb):生物分析相关代码集合。 +* [Biopython](http://biopython.org/wiki/MainPage):Biopython 是一组可以免费使用的用来进行生物计算的工具。 +* [blaze](http://blaze.readthedocs.org/en/latest/index.html):NumPy 和 Pandas 的大数据接口。 +* [cclib](http://cclib.github.io/):一个用来解析和解释计算化学软件包输出结果的库。 +* [NetworkX](https://networkx.github.io/):一个为复杂网络设计的高性能软件。 +* [Neupy](http://neupy.com/pages/home.html):执行和测试各种不同的人工神经网络算法。 +* [NumPy](http://www.numpy.org/):使用 Python 进行科学计算的基础包。 +* [Open Babel](http://openbabel.org/wiki/MainPage):一个化学工具箱,用来描述多种化学数据。 +* [Open Mining](https://github.com/mining/mining):使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。 +* [orange](http://orange.biolab.si/):通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。 +* [Pandas](http://pandas.pydata.org/):提供高性能,易用的数据结构和数据分析工具。 +* [PyDy](http://www.pydy.org/):PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。 +* [PyMC](https://github.com/pymc-devs/pymc3):马尔科夫链蒙特卡洛采样工具。 +* [RDKit](http://www.rdkit.org/):化学信息学和机器学习软件。 +* [SciPy](http://www.scipy.org/):由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。 +* [statsmodels](https://github.com/statsmodels/statsmodels):统计建模和计量经济学。 +* [SymPy](https://github.com/sympy/sympy):一个用于符号数学的 Python 库。 +* [zipline](https://github.com/quantopian/zipline):一个 Python 算法交易库。 +* [Bayesian-belief-networks](https://github.com/eBay/bayesian-belief-networks):优雅的贝叶斯理念网络框架。 +* [AWS Data Wrangler](https://github.com/awslabs/aws-data-wrangler):AWS 平台上使用的 Pandas。 +* [Optimus](https://github.com/ironmussa/Optimus):在使用 PySpark 时,让敏捷数据科学工作流程变得简单。 +* [Colour](http://colour-science.org/):大量色彩理论转换和算法的实现。 +* [Karate Club](https://github.com/benedekrozemberczki/karateclub):用于图形结构化数据的无监督机器学习工具箱。 +* [NIPY](http://nipy.org):神经影响学工具箱集合。 +* [ObsPy](https://github.com/obspy/obspy/wiki/):地震学 Python 工具箱。 +* [QuTiP](http://qutip.org/):Python 版 Quantum 工具箱。 +* [SimPy](https://gitlab.com/team-simpy/simpy):一个基于过程的离散事件模拟框架。 ### 数据可视化 -进行数据可视化的库。 参见: [awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)。 - -* matplotlib:一个 Python 2D 绘图库。[官网](http://matplotlib.org/) -* bokeh:用 Python 进行交互式 web 绘图。[官网](https://github.com/bokeh/bokeh) -* ggplot:ggplot2 给 R 提供的 API 的 Python 版本。[官网](https://github.com/yhat/ggplot) -* plotly:协同 Python 和 matplotlib 工作的 web 绘图库。[官网](https://plot.ly/python/) -* pyecharts:基于百度 Echarts 的数据可视化库。[官网](https://github.com/chenjiandongx/pyecharts) -* pygal:一个 Python SVG 图表创建工具。[官网](http://www.pygal.org/en/latest/) -* pygraphviz:Graphviz 的 Python 接口。[官网](https://pypi.python.org/pypi/pygraphviz) -* PyQtGraph:交互式实时 2D/3D/ 图像绘制及科学/工程学组件。[官网](http://www.pyqtgraph.org/) -* SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。[官网](http://jiffyclub.github.io/snakeviz/) -* vincent:把 Python 转换为 Vega 语法的转换工具。[官网](https://github.com/wrobstory/vincent) -* VisPy:基于 OpenGL 的高性能科学可视化工具。[官网](http://vispy.org/) +进行数据可视化的库。 参见:[awesome-javascript](https://github.com/sorrycc/awesome-javascript#data-visualization)。 + +* [matplotlib](http://matplotlib.org/):一个 Python 2D 绘图库。 +* [bokeh](https://github.com/bokeh/bokeh):用 Python 进行交互式 web 绘图。 +* [ggplot](https://github.com/yhat/ggplot):ggplot2 给 R 提供的 API 的 Python 版本。 +* [plotly](https://plot.ly/python/):协同 Python 和 matplotlib 工作的 web 绘图库。 +* [pyecharts](https://github.com/chenjiandongx/pyecharts):基于百度 Echarts 的数据可视化库。 +* [pygal](http://www.pygal.org/en/latest/):一个 Python SVG 图表创建工具。 +* [pygraphviz](https://pypi.python.org/pypi/pygraphviz):Graphviz 的 Python 接口。 +* [PyQtGraph](http://www.pyqtgraph.org/):交互式实时 2D/3D/ 图像绘制及科学/工程学组件。 +* [SnakeViz](http://jiffyclub.github.io/snakeviz/):一个基于浏览器的 Python's cProfile 模块输出结果查看工具。 +* [vincent](https://github.com/wrobstory/vincent):把 Python 转换为 Vega 语法的转换工具。 +* [VisPy](http://vispy.org/):基于 OpenGL 的高性能科学可视化工具。 +* [Altair](https://github.com/altair-viz/altair):用于 Python 的声明式统计可视化库。 +* [bqplot](https://github.com/bloomberg/bqplot):Jupyter Notebook的交互式绘图库。 +* [Cartopy](https://github.com/SciTools/cartopy):具有 matplotlib 支持的 python 制图库。 +* [Dash](https://plot.ly/products/dash/):构建在 Flask、React 和 Plotly之上,旨在用于分析 Web 应用程序。 + * [awesome-dash](https://github.com/Acrotrend/awesome-dash) +* [diagrams](https://github.com/mingrammer/diagrams):用图表作为代码。 +* [plotnine](https://github.com/has2k1/plotnine):基于ggplot2的Python图形语法。 +* [PyGraphviz](https://pypi.org/project/pygraphviz/): [Graphviz](http://www.graphviz.org/) 的 Python 接口。 +* [Seaborn](https://github.com/mwaskom/seaborn):使用 Matplotlib 进行统计数据可视化。 ### 计算机视觉 -计算机视觉库。 - -* OpenCV:开源计算机视觉库。[官网](http://opencv.org/) -* pyocr:Tesseract 和 Cuneiform 的包装库。[官网](https://github.com/jflesch/pyocr) -* pytesseract:[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。[官网](https://github.com/madmaze/pytesseract) -* [SimpleCV](http://hao.importnew.com/simplecv/):一个用来创建计算机视觉应用的开源框架。[官网](http://simplecv.org/) +计算机视觉相关库。 + +* [OpenCV](http://opencv.org/):开源计算机视觉库。 +* [pyocr](https://github.com/jflesch/pyocr):Tesseract 和 Cuneiform 的包装库。 +* [pytesseract](https://github.com/madmaze/pytesseract):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的另一包装库。 +* [SimpleCV](http://simplecv.org/):一个用来创建计算机视觉应用的开源框架。 +* [EasyOCR](https://github.com/JaidedAI/EasyOCR):支持40多种语言的即用型 OCR。 +* [Face Recognition](https://github.com/ageitgey/face_recognition):简单的面部识别库。 +* [Kornia](https://github.com/kornia/kornia/):PyTorch 的开源差异化计算机视觉库。 +* [tesserocr](https://github.com/sirfz/tesserocr):另一个简单的,兼容 Pillow 的 `tesseract-ocr` API 装饰器,可用于 OCR。 + +### 深度学习 + +神经网络和深度学习相关框架。 也可以参考 [awesome-deep-learning](https://github.com/ChristosChristofidis/awesome-deep-learning)。 + +* [Caffe](http://caffe.berkeleyvision.org):一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。 +* [Caffe2](https://caffe2.ai/):一个轻量级的,模块化的,可扩展的深度学习框架。 +* [keras](https://keras.io/):以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。 +* [MXNet](http://mxnet.incubator.apache.org/):一个高效和灵活的深度学习框架。 +* [Pytorch](http://pytorch.org/):一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。 +* [SerpentAI](https://github.com/SerpentAI/SerpentAI):游戏代理框架,可使用任意视频游戏作为深度学习沙箱。 +* [Theano](https://github.com/Theano/Theano):一个快速数值计算库。 +* [TensorFlow](http://tensorflow.org/):谷歌开源的最受欢迎的深度学习框架。 +* [skflow](https://github.com/tensorflow/skflow):一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。 +* [hebel](https://github.com/hannes-brt/hebel):GPU 加速的深度学习库。 +* [pydeep](https://github.com/andersbll/deeppy):Python 深度学习库。 ### 机器学习 -机器学习库。 参见: [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python). - -* Caffe: 一个 [Caffe](https://github.com/BVLC/caffe) 的 python 接口。[官网](http://caffe.berkeleyvision.org) -* [Caffe2](https://github.com/caffe2/caffe2/):一个轻量级的,模块化的,可扩展的深度学习框架。[官网](https://caffe2.ai/) -* Crab:灵活、快速的推荐引擎。[官网](https://github.com/muricoca/crab) -* gensim:人性化的话题建模库。[官网](https://github.com/piskvorky/gensim) -* hebel:GPU 加速的深度学习库。[官网](https://github.com/hannes-brt/hebel) -* [keras](https://github.com/keras-team/keras): 以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。[官网](https://keras.io/) -* [MXNet](https://github.com/apache/incubator-mxnet):一个高效和灵活的深度学习框架。[官网](http://mxnet.incubator.apache.org/) -* NuPIC:智能计算 Numenta 平台。[官网](https://github.com/numenta/nupic) -* pattern:Python 网络挖掘模块。[官网](https://github.com/clips/pattern) -* [PyBrain](http://hao.importnew.com/pybrain/):另一个 Python 机器学习库。[官网](https://github.com/pybrain/pybrain) -* pydeep:Python 深度学习库。[官网](https://github.com/andersbll/deeppy) -* [Pylearn2](http://hao.importnew.com/pylearn2/):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。[官网](https://github.com/lisa-lab/pylearn2) -* [python-recsys](http://hao.importnew.com/python-recsys/):一个用来实现推荐系统的 Python 库。[官网](https://github.com/ocelma/python-recsys) -* [Pytorch](https://github.com/pytorch/pytorch):一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。[官网](http://pytorch.org/) -* scikit-learn:基于 SciPy 构建的机器学习 Python 模块。[官网](http://scikit-learn.org/) -* skflow:一个 [TensorFlow](https://github.com/tensorflow/tensorflow) 的简化接口(模仿 scikit-learn)。[官网](https://github.com/tensorflow/skflow) -* [TensorFlow](https://github.com/tensorflow/tensorflow):谷歌开源的最受欢迎的深度学习框架。[官网](http://tensorflow.org/) -* Theano:一个快速数值计算库。[官网](https://github.com/Theano/Theano) -* vowpalporpoise:轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。[官网](https://github.com/josephreisinger/vowpalporpoise) - -### MapReduce - -MapReduce 框架和库。 - -* [dpark](http://hao.importnew.com/dpark/):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。[官网](https://github.com/douban/dpark) -* dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。[官网](https://github.com/klbostee/dumbo) -* luigi:这个模块帮你构建批处理作业的复杂流水线。[官网](https://github.com/spotify/luigi) -* mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。[官网](https://github.com/Yelp/mrjob) -* PySpark:Spark 的 Python API 。[官网](http://spark.apache.org/docs/latest/programming-guide.html) -* streamparse:运行针对事实数据流的 Python 代码。集成了 [Apache Storm](http://storm.apache.org/)。[官网](https://github.com/Parsely/streamparse) +机器学习相关库,也可以参考 [awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning#python)。 + +* [Crab](https://github.com/muricoca/crab):灵活、快速的推荐引擎。 +* [NuPIC](https://github.com/numenta/nupic):智能计算 Numenta 平台。 +* [pattern](https://github.com/clips/pattern):Python 网络挖掘模块。 +* [PyBrain](https://github.com/pybrain/pybrain):另一个 Python 机器学习库。 +* [Pylearn2](https://github.com/lisa-lab/pylearn2):一个基于 [Theano](https://github.com/Theano/Theano) 的机器学习库。 +* [python-recsys](https://github.com/ocelma/python-recsys):一个用来实现推荐系统的 Python 库。 +* [scikit-learn](http://scikit-learn.org/):基于 SciPy 构建的机器学习 Python 模块。 +* [vowpalporpoise](https://github.com/josephreisinger/vowpalporpoise):轻量级 [Vowpal Wabbit](https://github.com/JohnLangford/vowpalwabbit/) 的 Python 封装。 +* [gym](https://github.com/openai/gym):开发和比较强化学习算法的工具包。 +* [H2O](https://github.com/h2oai/h2o-3):开源快速可扩展的机器学习平台。 +* [Metrics](https://github.com/benhamner/Metrics):机器学习的评估指标。 +* [vowpal_porpoise](https://github.com/josephreisinger/vowpal_porpoise):Python 版 [Vowpal Wabbit](https://github.com/JohnLangford/vowpal_wabbit/) 装饰器。 +* [xgboost](https://github.com/dmlc/xgboost):可扩展,便携式和分布式梯度提升库。 +* [MindsDB](https://github.com/mindsdb/mindsdb):MindsDB是现有数据库的开源AI层,可让使用标准查询轻松地进行开发,训练和部署最新的机器学习模型。 + +### 推荐系统 + +用于构建推荐系统的相关库。 + +* [annoy](https://github.com/spotify/annoy):对 C++/Python 实现的近似近邻算法进行了内存优化。 +* [fastFM](https://github.com/ibayer/fastFM):Factorization Machine 相关库。 +* [implicit](https://github.com/benfred/implicit):对隐式数据集进行协作过滤的快速 Python 实现。 +* [libffm](https://github.com/guestwalk/libffm):Field-aware Factorization Machine (FFM) 相关库。 +* [lightfm](https://github.com/lyst/lightfm):很多流行的推荐算法的 Python 实现。 +* [spotlight](https://github.com/maciejkula/spotlight):使用 PyTorch 实现的深度推荐模型。 +* [Surprise](https://github.com/NicolasHug/Surprise):用于构建和分析推荐系统的科学工具。 +* [tensorrec](https://github.com/jfkirk/tensorrec):TensorFlow 的推荐引擎框架。 + +### 分布式计算 + +分布式计算相关的框架和库。 + +* [dpark](https://github.com/douban/dpark):Spark 的 Python 克隆版,一个类似 MapReduce 的框架。 +* [dumbo](https://github.com/klbostee/dumbo):这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。 +* [luigi](https://github.com/spotify/luigi):这个模块帮你构建批处理作业的复杂流水线。 +* [mrjob](https://github.com/Yelp/mrjob):在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。 +* [dask](https://github.com/dask/dask):用于分析计算的灵活的并行计算库。 +* [PySpark](http://spark.apache.org/docs/latest/programming-guide.html):Spark 的 Python API 。 +* [Ray](https://github.com/ray-project/ray/):一个用于并行和分布式 Python 的系统,它统一了机器学习生态系统。 +* [faust](https://github.com/robinhood/faust):一个 Python 流处理库,核心思想来源 [Kafka Streams](https://kafka.apache.org/documentation/streams/)。 +* [streamparse](https://github.com/Parsely/streamparse):运行针对事实数据流的 Python 代码。集成了 [Apache Storm](http://storm.apache.org/)。 ### 函数式编程 使用 Python 进行函数式编程。 -* CyToolz:Toolz 的 Cython 实现 : 高性能函数式工具。[官网](https://github.com/pytoolz/cytoolz/) -* fn.py:在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。[官网](https://github.com/kachayev/fn.py) -* funcy:炫酷又实用的函数式工具。[官网](https://github.com/Suor/funcy) -* Toolz:一组用于迭代器,函数和字典的函数式编程工具。[官网](https://github.com/pytoolz/toolz) +* [CyToolz](https://github.com/pytoolz/cytoolz/):Toolz 的 Cython 实现:高性能函数式工具。 +* [fn.py](https://github.com/kachayev/fn.py):在 Python 中进行函数式编程:实现了一些享受函数式编程缺失的功能。 +* [funcy](https://github.com/Suor/funcy):炫酷又实用的函数式工具。 +* [Toolz](https://github.com/pytoolz/toolz):一组用于迭代器,函数和字典的函数式编程工具。 +* [Coconut](https://github.com/evhub/coconut):为了简单、优雅、更 Pythonic 的函数式编程而构建的 Python 变体。 +* [more-itertools](https://github.com/erikrose/more-itertools):比 `itertools` 拥有更多的可迭代对象的操作方式。 +* [returns](https://github.com/dry-python/returns):一个类型安全的单元、转换器与合成工具集合。 ### 第三方 API 用来访问第三方 API 的库。 参见: [List of Python API Wrappers and Libraries](https://github.com/realpython/list-of-python-api-wrappers)。 -* apache-libcloud:一个为各种云设计的 Python 库。[官网](https://libcloud.apache.org/) -* boto:Amazon Web Services 的 Python 接口。[官网](https://github.com/boto/boto) -* django-wordpress:WordPress models and views for Django.[官网](https://github.com/sunlightlabs/django-wordpress/) -* facebook-sdk:Facebook 平台的 Python SDK.[官网](https://github.com/mobolic/facebook-sdk) -* facepy:Facepy 让和 Facebook's Graph API 的交互变得更容易。[官网](https://github.com/jgorset/facepy) -* gmail:Gmail 的 Python 接口。[官网](https://github.com/charlierguo/gmail) -* google-api-python-client:Python 用的 Google APIs 客户端库。[官网](https://github.com/google/google-api-python-client) -* gspread:Google 电子表格的 Python API.[官网](https://github.com/burnash/gspread) -* twython:Twitter API 的封装。[官网](https://github.com/ryanmcgrath/twython) +* [apache-libcloud](https://libcloud.apache.org/):一个为各种云设计的 Python 库。 +* [boto3](https://github.com/boto/boto3):Amazon Web Services 的 Python 接口。 +* [django-wordpress](https://github.com/sunlightlabs/django-wordpress/):Django 的 WordPress 模型与视图。 +* [facebook-sdk](https://github.com/mobolic/facebook-sdk):Facebook 平台的 Python SDK。 +* [facepy](https://github.com/jgorset/facepy):Facepy 让和 Facebook's Graph API 的交互变得更容易。 +* [gmail](https://github.com/charlierguo/gmail):Gmail 的 Python 接口。 +* [google-api-python-client](https://github.com/google/google-api-python-client):Python 用的 Google APIs 客户端库。 +* [gspread](https://github.com/burnash/gspread):Google 电子表格的 Python API。 +* [twython](https://github.com/ryanmcgrath/twython):Twitter API 的封装。 ### DevOps 工具 用于 DevOps 的软件和库。 -* Ansible:一个非常简单的 IT 自动化平台。[官网](https://github.com/ansible/ansible) -* SaltStack:基础设施自动化和管理系统。[官网](https://github.com/saltstack/salt) -* OpenStack:用于构建私有和公有云的开源软件。[官网](http://www.openstack.org/) -* Docker Compose:快速,分离的开发环境,使用 Docker。[官网](https://docs.docker.com/compose/) -* Fabric:一个简单的,Python 风格的工具,用来进行远程执行和部署。[官网](http://www.fabfile.org/) -* cuisine:为 Fabric 提供一系列高级函数。[官网](https://github.com/sebastien/cuisine) -* Fabtools:一个用来编写超赞的 Fabric 文件的工具。[官网](https://github.com/ronnix/fabtools) -* gitapi:Git 的纯 Python API。[官网](https://bitbucket.org/haard/gitapi) -* hgapi:Mercurial 的纯 Python API。[官网](https://bitbucket.org/haard/hgapi) -* honcho:[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile) 的应用。[官网](https://github.com/nickstenning/honcho) -* pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。[官网](https://github.com/pexpect/pexpect) -* psutil:一个跨平台进程和系统工具模块。[官网](https://github.com/giampaolo/psutil) -* supervisor:UNIX 的进程控制系统。[官网](https://github.com/Supervisor/supervisor) +* [Ansible](https://github.com/ansible/ansible):一个非常简单的 IT 自动化平台。 +* [SaltStack](https://github.com/saltstack/salt):基础设施自动化和管理系统。 +* [OpenStack](http://www.openstack.org/):用于构建私有和公有云的开源软件。 +* [Docker Compose](https://docs.docker.com/compose/):快速,分离的开发环境,使用 Docker。 +* [Fabric](http://www.fabfile.org/):一个简单的,Python 风格的工具,用来进行远程执行和部署。 +* [cuisine](https://github.com/sebastien/cuisine):为 Fabric 提供一系列高级函数。 +* [Fabtools](https://github.com/ronnix/fabtools):一个用来编写超赞的 Fabric 文件的工具。 +* [gitapi](https://bitbucket.org/haard/gitapi):Git 的纯 Python API。 +* [hgapi](https://bitbucket.org/haard/hgapi):Mercurial 的纯 Python API。 +* [honcho](https://github.com/nickstenning/honcho):[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用来管理基于 [Procfile](https://devcenter.heroku.com/articles/procfile) 的应用。 +* [pexpect](https://github.com/pexpect/pexpect):在一个伪终端中控制交互程序,就像 GNU expect 一样。 +* [psutil](https://github.com/giampaolo/psutil):一个跨平台进程和系统工具模块。 +* [supervisor](https://github.com/Supervisor/supervisor):UNIX 的进程控制系统。 +* [cloudinit](https://cloudinit.readthedocs.io/en/latest/):一个多分发包,用于处理云实例的早期初始化。 +* [pyinfra](https://github.com/Fizzadar/pyinfra):一个通用的 CLI 工具包和 python 库,用于自动化的基础设施。 +* [honcho](https://github.com/nickstenning/honcho):[Foreman](https://github.com/ddollar/foreman) 的 Python 克隆版,用于管理基于 Procfile 的应用。 +* [BorgBackup](https://www.borgbackup.org/):具有压缩和加密功能的重复数据删除存档器。 +* [docker-compose](https://docs.docker.com/compose/): 使用 [Docker](https://www.docker.com/) 的快速独立的开发环境。 ### 任务调度 任务调度库。 -* APScheduler:轻巧但强大的进程内任务调度,使你可以调度函数。[官网](http://apscheduler.readthedocs.org/en/latest/) -* django-schedule:一个 Django 排程应用。[官网](https://github.com/thauber/django-schedule) -* doit:一个任务执行和构建工具。[官网](http://pydoit.org/) -* gunnery:分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。[官网](https://github.com/gunnery/gunnery) -* Joblib:一组为 Python 提供轻量级作业流水线的工具。[官网](http://pythonhosted.org/joblib/index.html) -* Plan:如有神助地编写 crontab 文件。[官网](https://github.com/fengsp/plan) -* schedule:人性化的 Python 任务调度库。[官网](https://github.com/dbader/schedule) -* Spiff:使用纯 Python 实现的强大的工作流引擎。[官网](https://github.com/knipknap/SpiffWorkflow) -*   TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。[官网](http://docs.openstack.org/developer/taskflow/) -*  AirFlow:Airflow 是Airbnb公司开源的,是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。[官方](https://airflow.incubator.apache.org/) -  +* [APScheduler](http://apscheduler.readthedocs.org/en/latest/):轻巧但强大的进程内任务调度,使你可以调度函数。 +* [django-schedule](https://github.com/thauber/django-schedule):一个 Django 排程应用。 +* [doit](http://pydoit.org/):一个任务执行和构建工具。 +* [gunnery](https://github.com/gunnery/gunnery):分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。 +* [Joblib](http://pythonhosted.org/joblib/index.html):一组为 Python 提供轻量级作业流水线的工具。 +* [Plan](https://github.com/fengsp/plan):如有神助地编写 crontab 文件。 +* [schedule](https://github.com/dbader/schedule):人性化的 Python 任务调度库。 +* [Spiff](https://github.com/knipknap/SpiffWorkflow):使用纯 Python 实现的强大的工作流引擎。 +* [TaskFlow](http://docs.openstack.org/developer/taskflow/):一个可以让你方便执行任务的 Python 库,一致并且可靠。 +* [Airflow](https://airflow.apache.org/) :是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。 +* [Prefect](https://github.com/PrefectHQ/prefect):一个现代的工作流程编排框架,使构建、计划和监视健壮的数据管道变得容易。 + ### 外来函数接口 使用外来函数接口的库。 -* cffi:用来调用 C 代码的外来函数接口。[官网](https://pypi.python.org/pypi/cffi) -* [ctypes](http://hao.importnew.com/ctypes/):(Python 标准库) 用来调用 C 代码的外来函数接口。[官网](https://docs.python.org/2/library/ctypes.html) -* PyCUDA:Nvidia CUDA API 的封装。[官网](https://mathema.tician.de/software/pycuda/) -* SWIG:简化的封装和接口生成器。[官网](http://www.swig.org/Doc1.3/Python.html) +* [cffi](https://pypi.python.org/pypi/cffi):用来调用 C 代码的外来函数接口。 +* [ctypes](https://docs.python.org/2/library/ctypes.html):(Python 标准库) 用来调用 C 代码的外来函数接口。 +* [PyCUDA](https://mathema.tician.de/software/pycuda/):Nvidia CUDA API 的封装。 +* [SWIG](http://www.swig.org/Doc1.3/Python.html):简化的封装和接口生成器。 + +### 重构 + +Python 重构相关库和工具。 + + * [Bicycle Repair Man](http://bicyclerepair.sourceforge.net/):Python 的重构工具。 + * [Bowler](https://pybowler.io/):适用于现代Python的安全代码重构。 + * [Rope](https://github.com/python-rope/rope):一个 Python 的重构库。 ### 高性能 让 Python 更快的库。 -* Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。[官网](http://cython.org/) -* PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。[官网](https://github.com/Maratyszcza/PeachPy) -* PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。[官网](http://pypy.org/) -* [Pyston](http://hao.importnew.com/pyston-llvm-jit/):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。[官网](https://github.com/dropbox/pyston) -* Stackless Python:一个强化版的 Python。[官网](https://bitbucket.org/stackless-dev/stackless/overview) +* [Cython](http://cython.org/):优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。 +* [CLPython](https://github.com/metawilm/cl-python):用 Common Lisp 编写的 Python 编程语言的实现。 +* [Grumpy](https://github.com/google/grumpy):编译器比解释器更强大的 cpython2.7 替代品(alpha)。 +* [IronPython](https://github.com/IronLanguages/ironpython3):用 C#编写的 Python 编程语言的实现。 +* [Jython](https://hg.python.org/jython):为 JVM 用 Java 编写的 Python 编程语言的实现。 +* [MicroPython](https://github.com/micropython/micropython):精简高效的 Python 编程语言实现。 +* [Pyjion](https://github.com/Microsoft/Pyjion):基于 CoreCLR 的 Python JIT。 +* [Numba](http://numba.pydata.org/):Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。 +* [PeachPy](https://github.com/Maratyszcza/PeachPy):嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。 +* [PyPy](http://pypy.org/):使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。 +* [Pyston](https://github.com/dropbox/pyston):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。 +* [Stackless Python](https://bitbucket.org/stackless-dev/stackless/overview):一个强化版的 Python。 ### 微软的 Windows 平台 在 Windows 平台上进行 Python 编程。 -* Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。[官网](http://python-xy.github.io/) -* pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。[官网](http://www.lfd.uci.edu/~gohlke/pythonlibs/) -* PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。[官网](https://github.com/pythonnet/pythonnet) -* PyWin32:针对 Windows 的 Python 扩展。[官网](https://sourceforge.net/projects/pywin32/) -* WinPython:Windows 7/8 系统下便携式开发环境。[官网](https://winpython.github.io/) +* [Python(x,y)](http://python-xy.github.io/):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。 +* [pythonlibs](http://www.lfd.uci.edu/~gohlke/pythonlibs/):非官方的 Windows 平台 Python 扩展二进制包。 +* [PythonNet](https://github.com/pythonnet/pythonnet):Python 与 .NET 公共语言运行库 (CLR)的集成。 +* [PyWin32](https://sourceforge.net/projects/pywin32/):针对 Windows 的 Python 扩展。 +* [WinPython](https://winpython.github.io/):Windows 7/8 系统下便携式开发环境。 ### 网络可视化和 SDN 用来进行网络可视化和 SDN(软件定义网络)的工具和库。 -* Mininet:一款流行的网络模拟器以及用 Python 编写的 API。[官网](http://mininet.org/) -* POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。[官网](https://github.com/noxrepo/pox) -* Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。[官网](http://frenetic-lang.org/pyretic/) -*   SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。[官网](https://github.com/sdn-ixp/internet2award) -*   NRU:一个基于组件的软件定义网络框架。[官网](http://ryu.readthedocs.io/en/latest/) +* [Mininet](http://mininet.org/):一款流行的网络模拟器以及用 Python 编写的 API。 +* [POX](https://github.com/noxrepo/pox):一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。 +* [Pyretic](http://frenetic-lang.org/pyretic/):火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。 +* [SDX Platform](https://github.com/sdn-ixp/internet2award):基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。 +* [NRU](http://ryu.readthedocs.io/en/latest/):一个基于组件的软件定义网络框架。 +* [napalm](https://github.com/napalm-automation/napalm):可跨供应商 API 来操纵网络设备。 ### 硬件 用来对硬件进行编程的库。 -* ino:操作 [Arduino](https://www.arduino.cc/) 的命令行工具。[官网](http://inotool.org/) -* Pyro:Python 机器人编程库。[官网](http://pyrorobotics.com/) -* PyUserInput:跨平台的,控制鼠标和键盘的模块。[官网](https://github.com/SavinaRoja/PyUserInput) -* scapy:一个非常棒的操作数据包的库。[官网](https://github.com/secdev/scapy) -* wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作 WiFi。[官网](https://wifi.readthedocs.org/en/latest/) -* Pingo:Pingo 为类似 Raspberry Pi,pcDuino, Intel Galileo 等设备提供统一的 API 用以编程。[官网](http://www.pingo.io/) +* [ino](http://inotool.org/):操作 [Arduino](https://www.arduino.cc/) 的命令行工具。 +* [Pyro](http://pyrorobotics.com/):Python 机器人编程库。 +* [PyUserInput](https://github.com/SavinaRoja/PyUserInput):跨平台的,控制鼠标和键盘的模块。 +* [scapy](https://github.com/secdev/scapy):一个非常棒的操作数据包的库。 +* [wifi](https://wifi.readthedocs.org/en/latest/):一个 Python 库和命令行工具用来在 Linux 平台上操作 WiFi。 +* [Pingo](http://www.pingo.io/):Pingo 为类似 Raspberry Pi,pcDuino, Intel Galileo 等设备提供统一的 API 用以编程。 +* [keyboard](https://github.com/boppreh/keyboard):在 Windows 和 Linux 上挂钩并模拟全局键盘事件。 +* [mouse](https://github.com/boppreh/mouse):在 Windows 和 Linux 上挂钩并模拟全局鼠标事件。 ### 兼容性 帮助从 Python 2 向 Python 3 迁移的库。 -* Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。[官网](http://python-future.org/index.html) -* Python-Modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。[官网](https://github.com/mitsuhiko/python-modernize) -* Six:Python 2 和 3 的兼容性工具。[官网](https://pypi.python.org/pypi/six) +* [Python-Future](http://python-future.org/index.html):这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。 +* [Six](https://pypi.python.org/pypi/six):Python 2 和 3 的兼容性工具。 +* [modernize](https://github.com/PyCQA/modernize):使 Python 代码更加现代化以便最终迁移到 Python 3。 + +### 算法和设计模式 + +数据结构、算法和设计模式的 Python 实现。也可以参考 [awesome-algorithms](https://github.com/tayllan/awesome-algorithms) 。 + +* 算法 + * [algorithms](https://github.com/keon/algorithms):数据结构和算法的简单示例。 + * [python-ds](https://github.com/prabhupant/python-ds):用于面试的数据结构和算法的集合。 + * [sortedcontainers](https://github.com/grantjenks/python-sortedcontainers):排序集合的快速的纯 Python 实现。 + * [TheAlgorithms](https://github.com/TheAlgorithms/Python):所有算法的 Python 实现。 +* 设计模式 + * [PyPattyrn](https://github.com/tylerlaberge/PyPattyrn):一个简单而有效的库,用于实现常见的设计模式。 + * [python-patterns](https://github.com/faif/python-patterns):一个 Python 设计模式集合。 + * [transitions](https://github.com/pytransitions/transitions):轻量级的,面向对象的有限状态机实现。 + + + +### 内置类的增强版实现 + +一些 Python 内置类的增强版实现库。 + +* [attrs](https://github.com/python-attrs/attrs):一个在类定义时可替换 `__init__`, `__eq__`, `__repr__`等方法的样板。 +* [bidict](https://github.com/jab/bidict):高效的 Pythonic 的双向映射数据结构和相关功能。 +* [Box](https://github.com/cdgriffith/Box):具有高级点符号访问权限的 Python 字典。 +* [dataclasses](https://docs.python.org/3/library/dataclasses.html):(Python 标准库) 数据类。 +* [DottedDict](https://github.com/carlosescri/DottedDict):提供一种使用点路径符号访问列表和字典的方法的库。 + +### 机器人 + +机器人相关库。 + +* [PythonRobotics](https://github.com/AtsushiSakai/PythonRobotics):各种具有可视化效果的机器人算法的汇总。 +* [rospy](http://wiki.ros.org/rospy):ROS (Robot Operating System) 库。 + +### 聊天工具 + +聊天机器人开发相关的库。 + +* [errbot](https://github.com/errbotio/errbot/):实现 ChatOps 的最简单最受欢迎的聊天机器人。 + +### 编辑器插件和 IDE + +* Emacs + * [elpy](https://github.com/jorgenschaefer/elpy):Emacs Python 开发环境。 +* Sublime Text + * [anaconda](https://github.com/DamnWidget/anaconda):Anaconda 可将功能齐全的 Python 开发 IDE 转换为 Sublime Text 3。 + * [SublimeJEDI](https://github.com/srusskih/SublimeJEDI):一个很棒的自动补全库 Jedi 的Sublime Text 插件。 +* Vim + * [jedi-vim](https://github.com/davidhalter/jedi-vim):用于 Python 的 Jedi 自动补全库的 Vim 绑定。 + * [python-mode](https://github.com/python-mode/python-mode):一个将Vim转换为Python IDE的多合一插件。 + * [YouCompleteMe](https://github.com/Valloric/YouCompleteMe):包含 Jedi 补全的 Python 引擎。 +* Visual Studio + * [PTVS](https://github.com/Microsoft/PTVS):Visual Studio Python 工具。 +* Visual Studio Code + * [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python):对 Python 有丰富支持的官方 VSCode 扩展。 +* IDE + * [PyCharm](https://www.jetbrains.com/pycharm/):JetBrains 提供的商业 Python IDE,也有免费的社区版。 + * [spyder](https://github.com/spyder-ide/spyder): 开源 Python IDE。 + +### 企业级应用集成 + +企业级环境中用于集成的平台与工具。 + +* [Zato](https://zato.io):ESB, SOA, REST, APIs 以及云的 Python 整合。 + +### GraphQL + +GraphQL 相关库。 + +* [graphene](https://github.com/graphql-python/graphene/):Python GraphQL 框架。 +* [tartiflette-aiohttp](https://github.com/tartiflette/tartiflette-aiohttp/):Tartiflette 的基于 aiohttp 的装饰器,用于通过 HTTP 公开 GraphQL API。 +* [tartiflette-asgi](https://github.com/tartiflette/tartiflette-asgi/):Tartiflette GraphQL 引擎的 ASGI 支持。 +* [tartiflette](https://tartiflette.io):支持 Python 3.6+ 和 asyncio 的 SDL 优先的 GraphQL 引擎实现。 ### 杂项 不属于上面任何一个类别,但是非常有用的库。 -* blinker +* [blinker](https://github.com/jek/blinker):快速的 Python 运行时信号/事件分配系统。 +* [boltons](https://github.com/mahmoud/boltons):一组纯 Python 实用工具。 +* [itsdangerous](https://github.com/pallets/itsdangerous):将受信任的数据传递到不受信任的环境的帮助工具。 +* [magenta](https://github.com/magenta/magenta):使用人工智能生成音乐与艺术的工具。 +* [pluginbase](https://github.com/mitsuhiko/pluginbase):一个简单但灵活的Python插件系统。 +* [tryton](http://www.tryton.org/):一个通用业务框架。 + +### 相关站点 + +* 教程 + * [Full Stack Python](https://www.fullstackpython.com/) + * [Python Cheatsheet](https://www.pythoncheatsheet.org/) + * [Real Python](https://realpython.com) + * [The Hitchhiker’s Guide to Python](https://docs.python-guide.org/) + * [Ultimate Python study guide](https://github.com/huangsam/ultimate-python) +* 库 + * [Awesome Python @LibHunt](https://python.libhunt.com/) +* 其他 + * [Python ZEEF](https://python.zeef.com/alan.richmond) + * [Pythonic News](https://news.python.sc/) + * [What the f*ck Python!](https://github.com/satwikkansal/wtfpython) + +### 时事讯息 + +* [Awesome Python Newsletter](http://python.libhunt.com/newsletter) +* [Pycoder's Weekly](http://pycoders.com/) +* [Python Tricks](https://realpython.com/python-tricks/) +* [Python Weekly](http://www.pythonweekly.com/) + +### 播客 + +* [Django Chat](https://djangochat.com/) +* [Podcast.\_\_init__](https://podcastinit.com/) +* [Python Bytes](https://pythonbytes.fm) +* [Running in Production](https://runninginproduction.com/) +* [Talk Python To Me](https://talkpython.fm/) +* [Test and Code](https://testandcode.com/) +* [The Real Python Podcast](https://realpython.com/podcasts/rpp/) + From 1013747bcb2a1043f028fe6de2424d635aa33e57 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 14:38:07 +0800 Subject: [PATCH 113/143] Add files via upload --- PythonDev.jpg | Bin 0 -> 33942 bytes kaiyuanqianshao.jpg | Bin 0 -> 33026 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 PythonDev.jpg create mode 100644 kaiyuanqianshao.jpg diff --git a/PythonDev.jpg b/PythonDev.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36e1937c26870dec5f0fb8a10eb03faa50b6d87d GIT binary patch literal 33942 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

P-v@nn2@k4A;s9m?+KqZ5y7@6OVzi@;c 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 literal 0 HcmV?d00001 diff --git a/kaiyuanqianshao.jpg b/kaiyuanqianshao.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a1b486920fed8f50a4d775d07daf7df5ccea206 GIT binary patch literal 33026 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 EAHF-uumAu6 literal 0 HcmV?d00001 From 813b467ac230dff86c1fa5024bce818c405990de Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 14:41:25 +0800 Subject: [PATCH 114/143] Update README.md --- README.md | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 795ab61..e88a5fe 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,9 @@ ### 本项目的参与者 - 维护者:「开源前哨」和「Python开发者」微信公号 + +![](https://github.com/jobbole/awesome-python-cn/blob/master/kaiyuanqianshao.jpg?raw=true) +![](https://github.com/jobbole/awesome-python-cn/blob/master/PythonDev.jpg?raw=true) - 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 @@ -1406,36 +1409,3 @@ GraphQL 相关库。 * [magenta](https://github.com/magenta/magenta):使用人工智能生成音乐与艺术的工具。 * [pluginbase](https://github.com/mitsuhiko/pluginbase):一个简单但灵活的Python插件系统。 * [tryton](http://www.tryton.org/):一个通用业务框架。 - -### 相关站点 - -* 教程 - * [Full Stack Python](https://www.fullstackpython.com/) - * [Python Cheatsheet](https://www.pythoncheatsheet.org/) - * [Real Python](https://realpython.com) - * [The Hitchhiker’s Guide to Python](https://docs.python-guide.org/) - * [Ultimate Python study guide](https://github.com/huangsam/ultimate-python) -* 库 - * [Awesome Python @LibHunt](https://python.libhunt.com/) -* 其他 - * [Python ZEEF](https://python.zeef.com/alan.richmond) - * [Pythonic News](https://news.python.sc/) - * [What the f*ck Python!](https://github.com/satwikkansal/wtfpython) - -### 时事讯息 - -* [Awesome Python Newsletter](http://python.libhunt.com/newsletter) -* [Pycoder's Weekly](http://pycoders.com/) -* [Python Tricks](https://realpython.com/python-tricks/) -* [Python Weekly](http://www.pythonweekly.com/) - -### 播客 - -* [Django Chat](https://djangochat.com/) -* [Podcast.\_\_init__](https://podcastinit.com/) -* [Python Bytes](https://pythonbytes.fm) -* [Running in Production](https://runninginproduction.com/) -* [Talk Python To Me](https://talkpython.fm/) -* [Test and Code](https://testandcode.com/) -* [The Real Python Podcast](https://realpython.com/podcasts/rpp/) - From e6c53db205da02f1c6a447d48bdf967631c1d9f7 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 14:44:34 +0800 Subject: [PATCH 115/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e88a5fe..ef997df 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ![](https://github.com/jobbole/awesome-python-cn/blob/master/kaiyuanqianshao.jpg?raw=true) ![](https://github.com/jobbole/awesome-python-cn/blob/master/PythonDev.jpg?raw=true) -- 贡献者:[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) +- 贡献者:[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From ce804635196ac1ecb0cca0266a4d3fbcac085398 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 14:57:02 +0800 Subject: [PATCH 116/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B4=A1=E7=8C=AE?= =?UTF-8?q?=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef997df..dc6b67a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ![](https://github.com/jobbole/awesome-python-cn/blob/master/kaiyuanqianshao.jpg?raw=true) ![](https://github.com/jobbole/awesome-python-cn/blob/master/PythonDev.jpg?raw=true) -- 贡献者:[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) +- 贡献者:唐尤华、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From b869a1ec19849363f4ae3decca1233f3b8755164 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 15:47:37 +0800 Subject: [PATCH 117/143] Add files via upload --- ...on\344\272\214\347\273\264\347\240\201.png" | Bin 0 -> 481796 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\345\274\200\346\272\220\345\211\215\345\223\250 + Python\344\272\214\347\273\264\347\240\201.png" diff --git "a/\345\274\200\346\272\220\345\211\215\345\223\250 + Python\344\272\214\347\273\264\347\240\201.png" "b/\345\274\200\346\272\220\345\211\215\345\223\250 + Python\344\272\214\347\273\264\347\240\201.png" new file mode 100644 index 0000000000000000000000000000000000000000..32198ffd33cd79fd6b3ccbbb16145a1639cb3616 GIT binary patch literal 481796 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±=jVVj;!SDNIr}FXWkmDm6;BPRo$n8+7%W@ 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 PWEGkHT>-b5g5);%S_ohaDh<9h3A)vR}u(r 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
%hH7_j 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 =BlXhs%SIZ3h*f`SQUHIrp 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 %g6hxpSG^rUp|Ot-|qhM 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 Q&R;T?x4<{aH-7o;U+dq`FaQ7m literal 0 HcmV?d00001 From 55d63efe631603eb87e686a634e8cf6b96952d91 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 15:48:05 +0800 Subject: [PATCH 118/143] Delete kaiyuanqianshao.jpg --- kaiyuanqianshao.jpg | Bin 33026 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 kaiyuanqianshao.jpg diff --git a/kaiyuanqianshao.jpg b/kaiyuanqianshao.jpg deleted file mode 100644 index 8a1b486920fed8f50a4d775d07daf7df5ccea206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33026 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 EAHF-uumAu6 From abee2b86808c874fc16de5b2923be15dc81453c6 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 15:48:15 +0800 Subject: [PATCH 119/143] Delete PythonDev.jpg --- PythonDev.jpg | Bin 33942 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 PythonDev.jpg diff --git a/PythonDev.jpg b/PythonDev.jpg deleted file mode 100644 index 36e1937c26870dec5f0fb8a10eb03faa50b6d87d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33942 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

    P-v@nn2@k4A;s9m?+KqZ5y7@6OVzi@;c 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 From 01f23f7ef180634bdc2b6445b642854262105f30 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 15:50:09 +0800 Subject: [PATCH 120/143] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dc6b67a..9d8e4fe 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号 -![](https://github.com/jobbole/awesome-python-cn/blob/master/kaiyuanqianshao.jpg?raw=true) -![](https://github.com/jobbole/awesome-python-cn/blob/master/PythonDev.jpg?raw=true) +![](https://github.com/jobbole/awesome-python-cn/blob/master/%E5%BC%80%E6%BA%90%E5%89%8D%E5%93%A8%20+%20Python%E4%BA%8C%E7%BB%B4%E7%A0%81.png?raw=true&width=500) - 贡献者:唐尤华、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From 6fcd1730fb84c11c32784a432ccaf94da521c89a Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 15:54:25 +0800 Subject: [PATCH 121/143] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9d8e4fe..bb9bc73 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python 资源大全中文版 -我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨」和「Python开发者」微信公号维护更新。 +我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨」和「Python开发者」微信公号团队维护更新。 ## 关于项目 @@ -11,10 +11,10 @@ ### 本项目的参与者 -- 维护者:「开源前哨」和「Python开发者」微信公号 +- 维护者:「开源前哨」和「Python开发者」微信公号团队 ![](https://github.com/jobbole/awesome-python-cn/blob/master/%E5%BC%80%E6%BA%90%E5%89%8D%E5%93%A8%20+%20Python%E4%BA%8C%E7%BB%B4%E7%A0%81.png?raw=true&width=500) -- 贡献者:唐尤华、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From 3bd5d6492efe8716b9da727fc0a8e004a606069d Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 16:16:15 +0800 Subject: [PATCH 122/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb9bc73..edd2e92 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号团队 -![](https://github.com/jobbole/awesome-python-cn/blob/master/%E5%BC%80%E6%BA%90%E5%89%8D%E5%93%A8%20+%20Python%E4%BA%8C%E7%BB%B4%E7%A0%81.png?raw=true&width=500) +![](https://s3.jpg.cm/2020/12/08/ECgmf.png&width=500) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From 46db76fb239bb29cbaee66997433610055a83ccc Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 16:17:44 +0800 Subject: [PATCH 123/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index edd2e92..91268d3 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号团队 -![](https://s3.jpg.cm/2020/12/08/ECgmf.png&width=500) +![](https://s3.jpg.cm/2020/12/08/ECgmf.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From 253130024ff720197990b05885961aee0018d958 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 16:28:12 +0800 Subject: [PATCH 124/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 91268d3..82d303c 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号团队 -![](https://s3.jpg.cm/2020/12/08/ECgmf.png) +![](https://s3.jpg.cm/2020/12/08/EKbaf.jpg) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From 5f5a5b4520c332a5929446f70d3a480c0ced1ef8 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 16:30:05 +0800 Subject: [PATCH 125/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82d303c..e7e27f4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号团队 -![](https://s3.jpg.cm/2020/12/08/EKbaf.jpg) +![](https://s3.jpg.cm/2020/12/08/EKHrO.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From bc475fe1e8fa5831d83abe87aa0ee44ac7be164d Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Tue, 8 Dec 2020 17:52:03 +0800 Subject: [PATCH 126/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7e27f4..0d22169 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - 维护者:「开源前哨」和「Python开发者」微信公号团队 -![](https://s3.jpg.cm/2020/12/08/EKHrO.png) +![](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From c4a884c0be676c5541f00a19829d0b2251dacdfe Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Fri, 25 Dec 2020 21:50:26 +0800 Subject: [PATCH 127/143] Update README.md --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 0d22169..6c55684 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,8 @@ # Python 资源大全中文版 -我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨」和「Python开发者」微信公号团队维护更新。 +[awesome-python](https://github.com/vinta/awesome-python) 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨」和「Python开发者」微信公号团队维护更新。 -## 关于项目 - -### 我们要做什么? - -- 基于 awesome-python 列表,我们将对其中的各个资源项进行编译整理。此外还将从其他来源补充好资源。 - ### 本项目的参与者 - 维护者:「开源前哨」和「Python开发者」微信公号团队 From ad4e7bed86b993263435c8deae529542b519255d Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Sat, 26 Dec 2020 19:06:13 +0800 Subject: [PATCH 128/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c55684..490b95f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ### 本项目的参与者 -- 维护者:「开源前哨」和「Python开发者」微信公号团队 +- 维护者:「开源前哨」和「Python开发者」微信公号团队。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: ![](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) From 273d06d02e12413d81776eeb8d10dc81932a5997 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Mon, 4 Jan 2021 23:00:59 +0800 Subject: [PATCH 129/143] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 490b95f..0604268 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ### 本项目的参与者 -- 维护者:「开源前哨」和「Python开发者」微信公号团队。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: +- 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: ![](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) From e4c02f3055a884a17eb3f64da739318540db5702 Mon Sep 17 00:00:00 2001 From: huanglimin <630772296@qq.com> Date: Mon, 4 Jan 2021 23:01:38 +0800 Subject: [PATCH 130/143] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 0604268..a44383e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -![](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png) - 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) 注:名单不分排名,不定期补充更新 From a5809f352fc8ee7000b1b18336ea2267f49ac543 Mon Sep 17 00:00:00 2001 From: "hu.fwh" Date: Mon, 3 May 2021 15:49:43 +0800 Subject: [PATCH 131/143] =?UTF-8?q?add=20new=20=E5=88=86=E5=B8=83=E5=BC=8F?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=20->=20mars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a44383e..9a18ae3 100644 --- a/README.md +++ b/README.md @@ -1176,6 +1176,7 @@ Web socket 相关库。 * [Ray](https://github.com/ray-project/ray/):一个用于并行和分布式 Python 的系统,它统一了机器学习生态系统。 * [faust](https://github.com/robinhood/faust):一个 Python 流处理库,核心思想来源 [Kafka Streams](https://kafka.apache.org/documentation/streams/)。 * [streamparse](https://github.com/Parsely/streamparse):运行针对事实数据流的 Python 代码。集成了 [Apache Storm](http://storm.apache.org/)。 +* [mars](https://github.com/mars-project/mars):是基于张量的,用于进行大规模数据计算的统一计算框架。 ### 函数式编程 From a5e179423569919f8a8b0e0650353cf541fbc148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=97=E5=8F=B7?= <626522796@qq.com> Date: Sun, 9 May 2021 12:23:57 +0800 Subject: [PATCH 132/143] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E4=B8=BA=20Python=20?= =?UTF-8?q?=E9=A6=96=E5=AD=97=E6=AF=8D=E5=A4=A7=E5=86=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a44383e..3ad4af2 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ 管理 Python 版本和环境的工具 -* [p](https://github.com/qw3rtman/p):非常简单的交互式 python 版本管理工具。 +* [p](https://github.com/qw3rtman/p):非常简单的交互式 Python 版本管理工具。 * [pyenv](https://github.com/yyuu/pyenv):简单的 Python 版本管理工具。 * [Vex](https://github.com/sashahart/vex):可以在虚拟环境中执行命令。 * [virtualenv](https://pypi.python.org/pypi/virtualenv):创建独立 Python 环境的工具。 From b3e0fed7f5d3082e07251e62a2e90cd432d2281c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9A=97=E5=8F=B7?= <626522796@qq.com> Date: Sun, 9 May 2021 12:58:06 +0800 Subject: [PATCH 133/143] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=EF=BC=9A=E9=83=A8?= =?UTF-8?q?=E5=88=86=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E4=B8=AD=E8=8B=B1?= =?UTF-8?q?=E6=B7=B7=E6=8E=92=E6=97=B6=E7=9A=84=E6=A0=87=E7=82=B9=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E5=8F=8A=E7=A9=BA=E6=A0=BC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 3ad4af2..0625ae8 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ 用于解析和操作文本的库。 * 通用 - * [chardet](https://github.com/chardet/chardet):字符编码检测器,兼容 Python2 和 Python3。 + * [chardet](https://github.com/chardet/chardet):字符编码检测器,兼容 Python 2 和 Python 3。 * [difflib](https://docs.python.org/2/library/difflib.html):(Python 标准库)帮助我们进行差异化比较。 * [ftfy](https://github.com/LuminosoInsight/python-ftfy):让 Unicode 文本更完整更连贯。 * [fuzzywuzzy](https://github.com/seatgeek/fuzzywuzzy):模糊字符串匹配。 @@ -197,7 +197,7 @@ * [pytext](https://github.com/facebookresearch/pytext):基于 PyTouch 的自然语言模型框架。 * [PyTorch-NLP](https://github.com/PetrochukM/PyTorch-NLP):一个支持快速深度学习 NLP 原型研究的工具包。 * [spacy](https://spacy.io/):Python 和 Cython 中用于工业级自然语言处理的库。 -* [Stanza](https://github.com/stanfordnlp/stanza):斯坦福 NLP 集团的官方 Python 库,支持60多种语言。 +* [Stanza](https://github.com/stanfordnlp/stanza):斯坦福 NLP 集团的官方 Python 库,支持 60 多种语言。 * [funNLP](https://github.com/fighting41love/funNLP):中文自然语言处理的工具和数据集。 * [pkuseg-python](https://github.com/lancopku/pkuseg-python):一个支持对不同领域进行中文分词的工具箱。 @@ -246,7 +246,7 @@ * [tqdm](https://github.com/tqdm/tqdm):一个可在循环和命令行中使用的快速、可扩展的进度条。 * 生产力工具 * [aws-cli](https://github.com/aws/aws-cli):Amazon Web Services 的通用命令行界面。 - * [caniusepython3](https://github.com/brettcannon/caniusepython3):判断是哪个项目妨碍你你移植到 Python3。 + * [caniusepython3](https://github.com/brettcannon/caniusepython3):判断是哪个项目妨碍你你移植到 Python 3。 * [cookiecutter](https://github.com/audreyr/cookiecutter):从 cookiecutters(项目模板)创建项目的一个命令行工具。 * [doitlive](https://github.com/sloria/doitlive):一个用来在终端中进行现场演示的工具。 * [pyftpdlib](https://github.com/giampaolo/pyftpdlib):一个速度极快和可扩展的 Python FTP 服务库。 @@ -275,7 +275,7 @@ * [s3cmd](https://github.com/s3tools/s3cmd):一个用来管理 Amazon S3 和 CloudFront 的命令行工具。 * [s4cmd](https://github.com/bloomreach/s4cmd):超级 S3 命令行工具,性能更加强劲。 -* [you-get](https://www.soimort.org/you-get/):一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。 +* [you-get](https://www.soimort.org/you-get/):一个 YouTube/Youku/Niconico 视频下载器,使用 Python 3 编写。 * [youtube-dl](http://rg3.github.io/youtube-dl/):一个小巧的命令行程序,用来下载 YouTube 视频。 * [akshare](https://github.com/jindaxiang/akshare):为方便人使用而创建的金融数据接口库。 @@ -294,7 +294,7 @@ * [scikit-image](http://scikit-image.org/):一个用于(科学)图像处理的 Python 库。 * [thumbor](https://github.com/thumbor/thumbor):一个小型图像服务,具有剪裁,尺寸重设和翻转功能。 * [wand](https://github.com/dahlia/wand):[MagickWand ](http://www.imagemagick.org/script/magick-wand.php)的 Python 绑定。MagickWand 是 ImageMagick 的 C API 。 -* [face_recognition](https://github.com/ageitgey/face_recognition):简单易用的 python 人脸识别库。 +* [face_recognition](https://github.com/ageitgey/face_recognition):简单易用的 Python 人脸识别库。 * [pagan](https://github.com/daboth/pagan):基于输入和哈希的复古风图标(头像)生成工具。 * [PyMatting](https://github.com/pymatting/pymatting):支持 alpha matting 的库。 * [pywal](https://github.com/dylanaraps/pywal):由图像生成配色方案的工具。 @@ -670,7 +670,7 @@ Web socket 相关库。 * [untangle](https://github.com/stchris/untangle):将 XML 文档转换为 Python 对象,使其可以方便的访问。 * [xhtml2pdf](https://github.com/xhtml2pdf/xhtml2pdf):HTML/CSS 转 PDF 工具。 * [xmltodict](https://github.com/martinblech/xmltodict):像处理 JSON 一样处理 XML。 -* [WeasyPrint](http://weasyprint.org):用于HTML和CSS的可视化呈现引擎,并可以导出为PDF。 +* [WeasyPrint](http://weasyprint.org):用于HTML和CSS的可视化呈现引擎,并可以导出为 PDF。 * [xmldataset](https://xmldataset.readthedocs.io/en/latest/):简单 XML 解析。 爬取网络站点的库 @@ -710,7 +710,7 @@ Web socket 相关库。 * [Deform](http://deform.readthedocs.org/en/latest/):Python HTML 表单生成库,受到了 formish 表单生成库的启发。 * [django-bootstrap3](https://github.com/dyve/django-bootstrap3):集成了 Bootstrap 3 的 Django。 * [django-bootstrap4](https://github.com/zostera/django-bootstrap4):集成了 Bootstrap 4 的 Django。 -* [django-crispy-forms](http://django-crispy-forms.readthedocs.org/en/latest/):一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。 +* [django-crispy-forms](http://django-crispy-forms.readthedocs.org/en/latest/):一个 Django 应用,他可以让你以一种非常优雅且 DRY (Don't repeat yourself) 的方式来创建美观的表单。 * [django-remote-forms](https://github.com/WiserTogether/django-remote-forms):一个平台独立的 Django 表单序列化工具。 * [WTForms](http://wtforms.readthedocs.org/en/latest/):一个灵活的表单验证和呈现库。 * [WTForms-JSON](http://wtforms-json.readthedocs.org/en/latest/):一个 WTForms 扩展,用来处理 JSON 数据。 @@ -755,7 +755,7 @@ Web socket 相关库。 管理界面库。 * [Ajenti](https://github.com/ajenti/ajenti):一个你的服务器值得拥有的管理面板。 -* [django-suit](http://djangosuit.com/):Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。 +* [django-suit](http://djangosuit.com/):Django 管理界面的一个替代品(仅对于非商业用途是免费的)。 * [django-xadmin](https://github.com/sshwsfc/django-xadmin):Django admin 的一个替代品,具有很多不错的功能。 * [flask-admin](https://github.com/flask-admin/flask-admin):一个用于 Flask 的简单可扩展的管理界面框架。 * [flower](https://github.com/mher/flower):一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。 @@ -782,7 +782,7 @@ Web socket 相关库。 * [Nikola](https://www.getnikola.com/):一个静态网站和博客生成器。 * [Tinkerer](http://tinkerer.me/):Tinkerer 是一个博客引擎/静态站点生成器,由 Sphinx 驱动。 * [Lektor](https://www.getlektor.com/):一个简单易用的静态 CMS 和博客引擎。 -* [makesite](https://github.com/sunainapai/makesite):简单轻量的站点/博客生成器 (小于 130 行代码)。 +* [makesite](https://github.com/sunainapai/makesite):简单轻量的站点/博客生成器(小于 130 行代码)。 ### 进程 @@ -811,7 +811,7 @@ Web socket 相关库。 用于网络编程的库。 -* [asyncio](https://docs.python.org/3/library/asyncio.html):(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。 +* [asyncio](https://docs.python.org/3/library/asyncio.html):(Python 标准库) 异步 I/O,事件循环,协程以及任务。 * [trio](https://github.com/python-trio/trio):异步并发和 I/O 友好的库。 * [Twisted](https://twistedmatrix.com/trac/):一个事件驱动的网络引擎。 * [pulsar](https://github.com/quantmind/pulsar):事件驱动的并发框架。 @@ -824,7 +824,7 @@ Web socket 相关库。 帮助使用 WebSocket 的库。 -* [AutobahnPython](https://github.com/crossbario/autobahn-python):给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。 +* [AutobahnPython](https://github.com/crossbario/autobahn-python):给 Python、使用的 WebSocket & WAMP 基于 Twisted 和 [asyncio](https://docs.python.org/3/library/asyncio.html)。 * [Crossbar](https://github.com/crossbario/crossbar/):开源统一应用路由(Websocket & WAMP for Python on Autobahn)。 * [django-socketio](https://github.com/stephenmcd/django-socketio):给 Django 用的 WebSockets。 * [WebSocket-for-Python](https://github.com/Lawouach/WebSocket-for-Python):为 Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。 @@ -834,15 +834,15 @@ Web socket 相关库。 兼容 WSGI 的 web 服务器 * [gunicorn](https://pypi.python.org/pypi/gunicorn):Pre-forked, 部分是由 C 语言编写的。 -* [uwsgi](https://uwsgi-docs.readthedocs.org/en/latest/):uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。 +* [uwsgi](https://uwsgi-docs.readthedocs.org/en/latest/):uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务,由 C 语言编写。 * [bjoern](https://pypi.python.org/pypi/bjoern):异步,非常快速,由 C 语言编写。 * [fapws3](http://www.fapws.org/):异步 (仅对于网络端),由 C 语言编写。 * [meinheld](https://pypi.python.org/pypi/meinheld):异步,部分是由 C 语言编写的。 * [netius](https://github.com/hivesolutions/netius):异步,非常快速。 * [paste](http://pythonpaste.org/):多线程,稳定,久经考验。 * [rocket](https://pypi.python.org/pypi/rocket):多线程。 -* [waitress](https://waitress.readthedocs.org/en/latest/):多线程, 是它驱动着 Pyramid 框架。 -* [Werkzeug](http://werkzeug.pocoo.org/):一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。 +* [waitress](https://waitress.readthedocs.org/en/latest/):多线程,是它驱动着 Pyramid 框架。 +* [Werkzeug](http://werkzeug.pocoo.org/):一个 WSGI 工具库,驱动着 Flask,而且可以很方便大嵌入到你的项目中去。 ### ASGI 服务器 @@ -880,7 +880,7 @@ Web socket 相关库。 * [PyQt](https://riverbankcomputing.com/software/pyqt/intro):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4 和 Qt v5。 * [PySide](https://wiki.qt.io/PySide):跨平台用户界面框架 [Qt](http://www.qt.io/) 的 Python 绑定 ,支持 Qt v4。 * [Tkinter](https://wiki.python.org/moin/TkInter):Tkinter 是 Python GUI 的一个事实标准库。 -* [Toga](https://github.com/pybee/toga):一个 Python 原生的, 操作系统原生的 GUI 工具包。 +* [Toga](https://github.com/pybee/toga):一个 Python 原生的,操作系统原生的 GUI 工具包。 * [urwid](http://urwid.org/):一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。 * [wxPython](http://wxpython.org/):wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。 * [PyGObject](https://wiki.gnome.org/Projects/PyGObject):GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定。 @@ -943,7 +943,7 @@ Web socket 相关库。 * [Schemathesis](https://github.com/kiwicom/schemathesis):基于属性的自动测试工具,用于测试使用 Open API / Swagger 规范构建的 Web 应用程序。 * Mock 测试 * [mock](https://docs.python.org/3/library/unittest.mock.html):(Python 标准库) 一个用于伪造测试的库。 - * [doublex](https://pypi.python.org/pypi/doublex):Python 的一个功能强大的 doubles 测试框架。 + * [doublex](https://pypi.python.org/pypi/doublex):Python 的一个功能强大的 doubles 测试框架。 * [freezegun](https://github.com/spulec/freezegun):通过伪造日期模块来生成不同的时间。 * [httmock](https://github.com/patrys/httmock):针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。 * [httpretty](http://falcao.it/HTTPretty/):Python 的 HTTP 请求 mock 工具。 @@ -1093,9 +1093,9 @@ Web socket 相关库。 * [vincent](https://github.com/wrobstory/vincent):把 Python 转换为 Vega 语法的转换工具。 * [VisPy](http://vispy.org/):基于 OpenGL 的高性能科学可视化工具。 * [Altair](https://github.com/altair-viz/altair):用于 Python 的声明式统计可视化库。 -* [bqplot](https://github.com/bloomberg/bqplot):Jupyter Notebook的交互式绘图库。 -* [Cartopy](https://github.com/SciTools/cartopy):具有 matplotlib 支持的 python 制图库。 -* [Dash](https://plot.ly/products/dash/):构建在 Flask、React 和 Plotly之上,旨在用于分析 Web 应用程序。 +* [bqplot](https://github.com/bloomberg/bqplot):Jupyter Notebook 的交互式绘图库。 +* [Cartopy](https://github.com/SciTools/cartopy):具有 matplotlib 支持的 Python 制图库。 +* [Dash](https://plot.ly/products/dash/):构建在 Flask、React 和 Plotly 之上,旨在用于分析 Web 应用程序。 * [awesome-dash](https://github.com/Acrotrend/awesome-dash) * [diagrams](https://github.com/mingrammer/diagrams):用图表作为代码。 * [plotnine](https://github.com/has2k1/plotnine):基于ggplot2的Python图形语法。 @@ -1148,7 +1148,7 @@ Web socket 相关库。 * [Metrics](https://github.com/benhamner/Metrics):机器学习的评估指标。 * [vowpal_porpoise](https://github.com/josephreisinger/vowpal_porpoise):Python 版 [Vowpal Wabbit](https://github.com/JohnLangford/vowpal_wabbit/) 装饰器。 * [xgboost](https://github.com/dmlc/xgboost):可扩展,便携式和分布式梯度提升库。 -* [MindsDB](https://github.com/mindsdb/mindsdb):MindsDB是现有数据库的开源AI层,可让使用标准查询轻松地进行开发,训练和部署最新的机器学习模型。 +* [MindsDB](https://github.com/mindsdb/mindsdb):MindsDB 是现有数据库的开源 AI 层,可让使用标准查询轻松地进行开发,训练和部署最新的机器学习模型。 ### 推荐系统 @@ -1266,12 +1266,12 @@ Python 重构相关库和工具。 * [Cython](http://cython.org/):优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。 * [CLPython](https://github.com/metawilm/cl-python):用 Common Lisp 编写的 Python 编程语言的实现。 * [Grumpy](https://github.com/google/grumpy):编译器比解释器更强大的 cpython2.7 替代品(alpha)。 -* [IronPython](https://github.com/IronLanguages/ironpython3):用 C#编写的 Python 编程语言的实现。 +* [IronPython](https://github.com/IronLanguages/ironpython3):用 C# 编写的 Python 编程语言的实现。 * [Jython](https://hg.python.org/jython):为 JVM 用 Java 编写的 Python 编程语言的实现。 * [MicroPython](https://github.com/micropython/micropython):精简高效的 Python 编程语言实现。 * [Pyjion](https://github.com/Microsoft/Pyjion):基于 CoreCLR 的 Python JIT。 * [Numba](http://numba.pydata.org/):Python JIT (just in time) 编译器,针对科学用的 Python ,由 Cython 和 NumPy 的开发者开发。 -* [PeachPy](https://github.com/Maratyszcza/PeachPy):嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。 +* [PeachPy](https://github.com/Maratyszcza/PeachPy):嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows,Linux,OS X,Native Client 或者 Go 。 * [PyPy](http://pypy.org/):使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。 * [Pyston](https://github.com/dropbox/pyston):使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。 * [Stackless Python](https://bitbucket.org/stackless-dev/stackless/overview):一个强化版的 Python。 @@ -1366,7 +1366,7 @@ Python 重构相关库和工具。 * [SublimeJEDI](https://github.com/srusskih/SublimeJEDI):一个很棒的自动补全库 Jedi 的Sublime Text 插件。 * Vim * [jedi-vim](https://github.com/davidhalter/jedi-vim):用于 Python 的 Jedi 自动补全库的 Vim 绑定。 - * [python-mode](https://github.com/python-mode/python-mode):一个将Vim转换为Python IDE的多合一插件。 + * [python-mode](https://github.com/python-mode/python-mode):一个将 Vim 转换为 Python IDE 的多合一插件。 * [YouCompleteMe](https://github.com/Valloric/YouCompleteMe):包含 Jedi 补全的 Python 引擎。 * Visual Studio * [PTVS](https://github.com/Microsoft/PTVS):Visual Studio Python 工具。 @@ -1399,5 +1399,5 @@ GraphQL 相关库。 * [boltons](https://github.com/mahmoud/boltons):一组纯 Python 实用工具。 * [itsdangerous](https://github.com/pallets/itsdangerous):将受信任的数据传递到不受信任的环境的帮助工具。 * [magenta](https://github.com/magenta/magenta):使用人工智能生成音乐与艺术的工具。 -* [pluginbase](https://github.com/mitsuhiko/pluginbase):一个简单但灵活的Python插件系统。 +* [pluginbase](https://github.com/mitsuhiko/pluginbase):一个简单但灵活的 Python 插件系统。 * [tryton](http://www.tryton.org/):一个通用业务框架。 From e68f1e1ffcac559694e72e8b75d9139ba316a545 Mon Sep 17 00:00:00 2001 From: knktc Date: Fri, 2 Jul 2021 09:32:49 +0800 Subject: [PATCH 134/143] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84peewee?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除掉一个重复的peewee链接 --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index a44383e..a66c38b 100644 --- a/README.md +++ b/README.md @@ -415,13 +415,12 @@ Python 实现的数据库。 * [SQLAlchemy](http://www.sqlalchemy.org/):Python SQL 工具以及对象关系映射工具。 * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) * [awesome-sqlalchemy](https://github.com/dahlia/awesome-sqlalchemy) 系列 - * [Peewee](https://github.com/coleifer/peewee):一个小巧,富有表达力的 ORM。 + * [Peewee](https://github.com/coleifer/peewee):一个小巧,富有表现力的 ORM。 * [PonyORM](https://ponyorm.com/):提供面向生成器的 SQL 接口的 ORM。 * [python-sql](https://pypi.python.org/pypi/python-sql):编写 Python 风格的 SQL 查询。 * [dataset](https://github.com/pudo/dataset):在数据库中存储字典,支持 SQLite,MySQL 和 PostgreSQL。 * [orator](https://github.com/sdispater/orator):Orator ORM,提供了一个简单而美观的 ActiveRecord 实现。 * [orm](https://github.com/encode/orm):一个异步的 ORM。 - * [peewee](https://github.com/coleifer/peewee):一个小但是很有表现力的 ORM。 * [pony](https://github.com/ponyorm/pony/):提供面向生成器的SQL接口的ORM。 * [pydal](https://github.com/web2py/pydal/):纯 Python 数据库抽象接口层。 * NoSQL 数据库 From f9382cd3ac49b666ff445e20038fe446599b2153 Mon Sep 17 00:00:00 2001 From: tangyouhua Date: Thu, 5 Aug 2021 21:19:24 +0800 Subject: [PATCH 135/143] add contributor vmp65l3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68907b2..630b6c6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember) +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、You 注:名单不分排名,不定期补充更新 From 01231d91f76c2ec775b97d0898b71c0ee89f3c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BD=B3=E6=98=9F?= Date: Sun, 15 Aug 2021 15:37:31 +0800 Subject: [PATCH 136/143] Remove duplicate `moment` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除重复的 `moment` 介绍 --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f3670d1..7c99977 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,6 @@ * [dateutil](https://pypi.python.org/pypi/python-dateutil):Python datetime 模块的扩展。 * [delorean](https://github.com/myusuf3/delorean/):解决 Python 中有关日期处理的棘手问题的库。 * [maya](https://github.com/kennethreitz/maya):人性化的时间处理库。 -* [moment](https://github.com/zachwill/moment):一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。 * [pendulum](https://github.com/sdispater/pendulum):一个比 arrow 更具有明确的,可预测的行为的时间操作库。 * [PyTime](https://github.com/shinux/PyTime):一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。 * [pytz](https://launchpad.net/pytz):现代以及历史版本的世界时区定义。将时区数据库引入 Python。 From e19990b41cf0f2c2d73663cd944bfecce1925345 Mon Sep 17 00:00:00 2001 From: Youhua Tang Date: Sat, 21 Aug 2021 18:46:21 +0800 Subject: [PATCH 137/143] add contributor JiaxingZhao --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c99977..1150b45 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、You +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、You 注:名单不分排名,不定期补充更新 From eb98450d90e9260ae2e07833ab3de8656fdedcb7 Mon Sep 17 00:00:00 2001 From: zhtyyx <50820129+zhtyyx@users.noreply.github.com> Date: Wed, 25 Aug 2021 16:32:51 +0800 Subject: [PATCH 138/143] Update README.md docs(readme): add paddleOCR --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1150b45..e718c52 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,7 @@ ### OCR 光学字符识别库。 - +* [paddleocr](https://github.com/PaddlePaddle/PaddleOCR): 除光学字符识别外还引入了表格识别。 * [pyocr](https://gitlab.gnome.org/World/OpenPaperwork/pyocr):Tesseract 和 Cuneiform 的一个封装。 * [pytesseract](https://github.com/madmaze/pytesseract):[Google Tesseract OCR](https://github.com/tesseract-ocr) 的一个封装。 From c86630b4f5b97a532ca6ee528cec48acd0c01ed1 Mon Sep 17 00:00:00 2001 From: Youhua Tang Date: Thu, 2 Sep 2021 07:29:15 +0800 Subject: [PATCH 139/143] add contributor zhtyyx --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e718c52..33d806a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、You +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、[zhtyyx](https://github.com/zhtyyx)、You 注:名单不分排名,不定期补充更新 From 3b8e33335446057829b86e6b8ff51556eba0e040 Mon Sep 17 00:00:00 2001 From: Youhua Tang Date: Thu, 2 Sep 2021 07:31:39 +0800 Subject: [PATCH 140/143] Updat Quokka url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33d806a..6d4a467 100644 --- a/README.md +++ b/README.md @@ -481,7 +481,7 @@ Web socket 相关库。 * [Mezzanine](http://mezzanine.jupo.org/):一个强大的,持续的,灵活的内容管理平台。 * [Opps](http://opps.github.io/opps/):一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。 * [Plone](https://plone.org/):一个构建于开源应用服务器 Zope 之上的 CMS。 -* [Quokka](http://quokkaproject.org/):灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。 +* [Quokka](https://quintagroup.com/cms/python/quokka):灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。 * [Wagtail](https://wagtail.io/):一个 Django 内容管理系统。 * [Widgy](https://wid.gy/):最新的 CMS 框架,基于 Django。 * [indico](https://github.com/indico/indico):一个功能丰富的事件管理系统,由 @[CERN](https://en.wikipedia.org/wiki/CERN) 开发。 From be0cb9f8e06ac685da26d89449758af39ebf0201 Mon Sep 17 00:00:00 2001 From: Youhua Tang Date: Fri, 17 Sep 2021 07:41:49 +0800 Subject: [PATCH 141/143] update fuzzywuzzy to thefuzz rename project and add contributor Lynn Cao --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6d4a467..0b7d48c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、[zhtyyx](https://github.com/zhtyyx)、You +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、[zhtyyx](https://github.com/zhtyyx)、[Lynn Cao](https://github.com/caolincn)、You 注:名单不分排名,不定期补充更新 @@ -120,7 +120,7 @@ * [chardet](https://github.com/chardet/chardet):字符编码检测器,兼容 Python 2 和 Python 3。 * [difflib](https://docs.python.org/2/library/difflib.html):(Python 标准库)帮助我们进行差异化比较。 * [ftfy](https://github.com/LuminosoInsight/python-ftfy):让 Unicode 文本更完整更连贯。 - * [fuzzywuzzy](https://github.com/seatgeek/fuzzywuzzy):模糊字符串匹配。 + * [thefuzz](https://github.com/seatgeek/thefuzz):模糊字符串匹配。 * [Levenshtein](https://github.com/ztane/python-Levenshtein/):快速计算编辑距离以及字符串的相似度。 * [pangu.py](https://github.com/vinta/pangu.py):在中日韩语字符和数字字母之间添加空格。 * [pypinyin](https://github.com/mozillazg/python-pinyin):汉字拼音转换工具 Python 版。 From 11ec05709315f657a66059e4c2b5878146c5967e Mon Sep 17 00:00:00 2001 From: River Date: Fri, 15 Oct 2021 17:14:26 +0800 Subject: [PATCH 142/143] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E9=87=91?= =?UTF-8?q?=E8=9E=8D=E9=87=8F=E5=8C=96=E7=9B=B8=E5=85=B3=E7=9A=84=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 0b7d48c..737f1b0 100644 --- a/README.md +++ b/README.md @@ -1390,6 +1390,12 @@ GraphQL 相关库。 * [tartiflette-asgi](https://github.com/tartiflette/tartiflette-asgi/):Tartiflette GraphQL 引擎的 ASGI 支持。 * [tartiflette](https://tartiflette.io):支持 Python 3.6+ 和 asyncio 的 SDL 优先的 GraphQL 引擎实现。 +### 股票金融 +- [QUANTAXIS](https://github.com/QUANTAXIS/QUANTAXIS):支持任务调度,分布式部署的股票/期货/期权/港股/虚拟货币的数据/回测/模拟/交易/可视化/多账户纯本地量化解决方案 +- [abu](https://github.com/bbfamily/abu): 基于python的开源量化交易,量化投资架构 +- [Hikyuu Quant](https://github.com/fasiondog/hikyuu):基于C++/Python的开源量化交易研究框架,用于策略分析及回测(仅受限于数据,如有数据也可用于期货等) +- [vnpy](https://github.com/vnpy/vnpy):基于Python的开源量化交易系统开发框架,整合了多种交易接口,并针对具体策略算法和功能开发提供了简洁易用的API,用于快速构建交易员所需的量化交易应用 + ### 杂项 不属于上面任何一个类别,但是非常有用的库。 From e718fecd821fb94d696713da1259a86f18b400af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=A4=E5=8D=8E?= Date: Wed, 24 Nov 2021 17:20:31 +0800 Subject: [PATCH 143/143] add contributor River --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 737f1b0..c6263f6 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ - 维护者:[「开源前哨」和「Python开发者」微信公号团队](https://github-1255921244.cos.ap-nanjing.myqcloud.com/awesome-python-cn.png)。「开源前哨」会定期在知乎专栏分享最新、有趣和热门的开源项目,每个项目都有详细的介绍和示例。传送门: -- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、[zhtyyx](https://github.com/zhtyyx)、[Lynn Cao](https://github.com/caolincn)、You +- 贡献者:[唐尤华](https://github.com/orgs/jobbole/people/tangyouhua)、[qtvspa](https://github.com/qtvspa)、[艾凌风](https://github.com/hanxiaomax)、Namco、[Daetalus](https://github.com/Daetalus)、黄利民、atupal、rainbow、[木头lbj](https://github.com/mutoulbj)、beyondwu、[cissoid](https://github.com/cissoid)、[李广胜](https://github.com/liguangsheng)、[polyval](https://github.com/polyval)、冰斌、赵叶宇、л stalgic、硕恩、[strongit](https://github.com/strongit)、yuukilp、[chenjiandongx](https://github.com/chenjiandongx)、[autopenguin](https://github.com/autopenguin)、[visonforcoding](https://github.com/visonforcoding)、[Super赛亚人](https://github.com/No-96)、[Since-future](https://github.com/Since-future)、[knktc](https://github.com/knktc)、[zhucebuliaopx](https://github.com/zhucebuliaopx)、[wardseptember](https://github.com/wardseptember)、[vmp65l3](https://github.com/vmp65l3)、[JiaxingZhao](https://github.com/JiaxingZhao)、[zhtyyx](https://github.com/zhtyyx)、[Lynn Cao](https://github.com/caolincn)、[River](https://github.com/lihuafengzi)、You 注:名单不分排名,不定期补充更新

    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