欢迎回来,这是我们第五次推出年度优秀 Python 支持库榜单。在这里,我们列出了隐匿于开源世界里的瑰宝,既可以帮你启动新的项目,也可以为你现有的项目添光加彩。本榜单覆盖了各个领域,包括机器学习与非机器学习的支持库。
希望你能和我们一样喜欢本年度的优秀支持库榜单,话不多说,题归正文!
1. HTTPX
项目网址:
https://www.encode.io/httpx/
经常进行 API 交互的 Python 忠粉,对 requests 应该是运用自如了。不过,对于日趋普及的现代高性能应用而言,在用到异步范式时,requests 就显得有点捉襟见肘了。
为了解决这一问题,大咖 Tom Christie 和他的小伙伴给大家带来了新世代异步 HTTP 客户端 ~ HTTPX。
紧跟 requests 步伐,HTTPX 在支持 requests 标准功能的同时,还支持 HTTP/2 与 HTTP/1,以及通过 ASGI 协议直接调用 Python 网络应用,此外还有完善的类型注释。
要执行大规模并发请求?HTTPX 就是你要找的答案。
注意:HTTPX 仍在 alpha 版开发阶段,目前只开发了异步客户端,将来还会引入同步客户端。
2. Starlette
项目网址:
https://www.starlette.io/
Starlette 打包了 WebSocket、GraphQL、进程内后台任务等多种功能,是真正高性能的轻量级 ASGI 框架与工具箱。所有功能都完全支持类型注释代码库,且不需要任何硬性依赖项。可以把它当成非常轻量级的现代异步版 Flask。
Starlette 的灵活性很强,既可以用作完整的网络框架,也可以只用作 ASGI 工具箱。
Starlette 运行在 uvicorn 之上,这个支持库入选了去年的 10 大优秀 Python 支持库榜单。
如果想开发新型网络应用,强烈建议您给 Starlette 一个发光发热的机会。
3. FastAPI
项目网址:
https://github.com/tiangolo/fastapi
Starlette 很赞,但它太迷你了,虽然给了开发者很大的自由,但有时,用户要的其实只是一个能快速完成任务的框架。
Sebastián Ramírez 就是出于这个目的开发的 FastAPI,怎么说呢?这个支持库的各个方面都很 Fast。
这个用 Python 开发 API 的新框架具有超高性能,而且可以基于 OpenAPI 标准自动生成交互式文档。默认支持 Swagger UI 与 ReDoc,允许直接从浏览器调用、测试 API,从而提高开发效率。用这个框架开发 API,真的是又快又简单。
该支持库还支持现代 Python 优秀实用功能之一:类型提示。FastAPI 在很多方面都使用了类型提示,其中最酷的一个功能是由 Pydantic 加持的自动数据验证与转换。
FastAPI 基于 Starlette 开发,性能与 NodeJS 和 GO 相当,还自带 WebSocket 与 GraphQL 原生支持。
最后,对于开源支持库而言,它的技术支持文档也非常不错。说真的,去看一下吧!
4. Immutables
项目网址:
https://github.com/magicstack/immutables
MagicStack 的兄弟回归了,这次他们带来的是一个简单、优雅的不可变映射类型(“冻结字典”)。
这东西的好处在哪儿?呃,希望你能听得懂下面这句话,Haskell 等函数编程语言里使用的哈希数组映射字典树(HAMT)的底层数据结构。最值得注意的是,不管 set() 还是 get() 操作的性能都为 O(log N),且对于相对较小的映射,可以达到 O(1)。
如果你的应用里字典的规模较大,并且想提高一下性能,这个酷酷的新支持库值得一试。
5. Pyodide
项目网址:
https://github.com/iodide-project/pyodide/
Pyodide 是本榜单里最刷三观的项目。通过 WebAssembly,它把 Python 科学引入到了浏览器界面,把科学计算提升到了全新的层面。
想用 Numpy 搞定一些数字?用 Pandas 处理大型 DataFrame?用 Matplotlib 为计算结果进行可视化?有了 Pyodide,这些操作在浏览器里就可以轻轻松松地实现了。
这还不算完,还有好消息:这个库可用的 Python 支持库已经超过了 35 个,您这是要上天啊。
6. Modin
项目网址:
https://github.com/modin-project/modin
Modin 的口号是“只改一行代码,就能加速 Pandas”,没错,就是这么简单。只要安装 Modin,更改 import 语句,在多核笔记本上,处理数据的速度就能提高 4 倍。
我滴个神 ~~ 这是怎么做到的?Modin 有自带的 modin.pandas.DataFrame 对象,这是一个轻量级的并行 DataFrame 对象。因为与 Pandas API 兼容,使用这个对象就跟是透明的一样,在后台,该支持库使用 Ray 或 Dask 作为计算引擎,执行分布式数据计算。
有的时候,获得更快的速度就是那么简单,改一两行代码就可以了,Modin 就是证明。
7. Streamlit
项目网址:
https://github.com/streamlit/streamlit
不论机器学习项目多么的超凡脱俗,都免不了要手动与模型和数据交互的工作。
与其投入无数小时,开发数千行代码的应用,Streamlit 让你可以快速搭建用来分享模型与分析的 APP。构建交互式 UI、实现数据可视化、输出分析模型现在就是小菜一碟。
有了 Streamlit,只要添加几行代码,嗖的一下,就能从 Python 脚本代码飞升为产品级 APP。TensorFlow、Keras、PyTorch、Pandas,只要是你能想到的数据科学工具,Streamlit 都已经支持了。
8. Transformers
项目网址:
https://github.com/huggingface/transformers
从事机器学习相关工作的读者,一定会对过去的一年中自然语言处理(NLP)领域里的重大突破有所耳闻。
BERT、XLNet、roBERTa 等新涌现出来的高性能模型已经取得了长足的发展,尤其是在文本分类、机器翻译、命名实体识别等众多 NLP 领域里的高精尖突破层出不穷,让人眼花缭乱。
对业界人士来说,找到一款既能在产品级程序上利用这些模型,又不会太过复杂的工具,尤为重要。对研究者而言,一个既不用花费太多时间编写模板代码,又能调校支持库内核,不断开发、实验新模型的支持库,也非常重要。
Hugging Face 的小伙伴给我们带来了变形金刚(Transformers),这个支持库支持最现代的 NLP 模型打包、预训练等功能,而且还开箱即用。TensorFlow 2.0 与 PyTorch 之间的互操作,让该支持库达到了业界标准,完全可以为研究工作与产品级应用程序加持。该支持库由研究人员开发,因此,它的更新速度非常快,而且还在不断引入新式模型。
锦上添花:Hugging Face 团队开发了 DistilBERT,这是基于 BERT 提炼出来的,更小、更快、更省钱、更轻量的版本。
还在犹豫要不要用 Hugging Face 的变形金刚处理现代 NLP 任务?看到这篇文章就是缘分,快来试下这个在线演示,感受变形金刚的魔力吧。
9. Detectron2
项目网址:
https://github.com/facebookresearch/detectron2
Facebook AI 研究团队(FAIR)在开发对象探知、姿态估测、语义/实例分隔、全景分割等模型的同时,不断将计算机视觉(CV)推向新的高度。
就在短短的几年前,上述这些技术就像是科幻小说。我们从未对 FAIR 有过什么期望,但这回他们再一次震撼全场。
Detectron2 是 Detectron 的延续,该支持库建立在 PyTorch 之上,整合了多种高精尖的计算机视觉算法。
鉴于支持用例类型多种多样,这类支持库的开发难度特别大。与 Hugging Face 的 Transformers 类似,FAIR 团队的 Detectron2 真的很强大,其延展性与模块化的设计风格,让它在计算机视觉研究应用中独领风骚。同时,Detectron2 的应用极其简单,非常适合那些只想快速得到结果,不想了解核心算法的人。没错,只要几行 Python 代码,就可以通过 Detectron2 让你开发的软件“理解”图片。
Detectron2 能否形成生机勃勃的社区,还需要些时间来验证,但到目前为止,它的前途还是蛮光明的。很多研究人员都在为 Detectron2 研发更新、更快、更好的模型,因此,它成为计算机视觉应用“首选”解决方案的可能性很大。如果你从事计算机视觉工作,一定要对这个支持库保持密切的关注!
10. Metaflow
项目网址:
https://docs.metaflow.org/introduction/what-is-metaflow
Metaflow 这个支持库实在太新了,差点就没赶上 2019 年榜单评选!但不要因此就小瞧它:别看它 12 月 3 日才正式发布,其实它是 Netfilx 两年精雕细琢的成果,通过了长期内部实测,Netflix 才决定开源。
Metaflow 这个 Python 支持库能帮助数据科学家与数据工程师开发在现实世界中应用的实战项目。它的目标是,减轻非技术型数据科学家学习技术的负担,比如,如何利用计算资源、怎么实现并行运算、架构设计、版本控制等。Netflix 与 AWS 合作,让用户通过开箱即用的分布式计算即可轻松定义复杂数据流。
我们在 Tryolabs 内部已经评测了几个 Metaflow 核心项目。如果你也对这个工具感兴趣,请参阅 Netflix 博客的发布贴。
结论
这一年,或者说又一个10 年马上就要过去了,开源社区这些年的对世界的贡献将对今后几年产生深远的影响。