2019 年 10 大優(yōu)秀 Python 支持庫(kù)
歡迎回來(lái),這是我們第五次推出年度優(yōu)秀 Python 支持庫(kù)榜單。在這里,我們列出了隱匿于開源世界里的瑰寶,既可以幫你啟動(dòng)新的項(xiàng)目,也可以為你現(xiàn)有的項(xiàng)目添光加彩。本榜單覆蓋了各個(gè)領(lǐng)域,包括機(jī)器學(xué)習(xí)與非機(jī)器學(xué)習(xí)的支持庫(kù)。
希望你能和我們一樣喜歡本年度的優(yōu)秀支持庫(kù)榜單,話不多說(shuō),題歸正文!
1. HTTPX
項(xiàng)目網(wǎng)址:
https://www.encode.io/httpx/
經(jīng)常進(jìn)行 API 交互的 Python 忠粉,對(duì) requests 應(yīng)該是運(yùn)用自如了。不過(guò),對(duì)于日趨普及的現(xiàn)代高性能應(yīng)用而言,在用到異步范式時(shí),requests 就顯得有點(diǎn)捉襟見肘了。
為了解決這一問(wèn)題,大咖 Tom Christie 和他的小伙伴給大家?guī)?lái)了新世代異步 HTTP 客戶端 ~ HTTPX。
緊跟 requests 步伐,HTTPX 在支持 requests 標(biāo)準(zhǔn)功能的同時(shí),還支持 HTTP/2 與 HTTP/1,以及通過(guò) ASGI 協(xié)議直接調(diào)用 Python 網(wǎng)絡(luò)應(yīng)用,此外還有完善的類型注釋。
要執(zhí)行大規(guī)模并發(fā)請(qǐng)求?HTTPX 就是你要找的答案。
注意:HTTPX 仍在 alpha 版開發(fā)階段,目前只開發(fā)了異步客戶端,將來(lái)還會(huì)引入同步客戶端。
2. Starlette
項(xiàng)目網(wǎng)址:
https://www.starlette.io/
Starlette 打包了 WebSocket、GraphQL、進(jìn)程內(nèi)后臺(tái)任務(wù)等多種功能,是真正高性能的輕量級(jí) ASGI 框架與工具箱。所有功能都完全支持類型注釋代碼庫(kù),且不需要任何硬性依賴項(xiàng)。可以把它當(dāng)成非常輕量級(jí)的現(xiàn)代異步版 Flask。
Starlette 的靈活性很強(qiáng),既可以用作完整的網(wǎng)絡(luò)框架,也可以只用作 ASGI 工具箱。
Starlette 運(yùn)行在 uvicorn 之上,這個(gè)支持庫(kù)入選了去年的 10 大優(yōu)秀 Python 支持庫(kù)榜單。
如果想開發(fā)新型網(wǎng)絡(luò)應(yīng)用,強(qiáng)烈建議您給 Starlette 一個(gè)發(fā)光發(fā)熱的機(jī)會(huì)。
3. FastAPI
項(xiàng)目網(wǎng)址:
https://github.com/tiangolo/fastapi
Starlette 很贊,但它太迷你了,雖然給了開發(fā)者很大的自由,但有時(shí),用戶要的其實(shí)只是一個(gè)能快速完成任務(wù)的框架。
Sebastián Ramírez 就是出于這個(gè)目的開發(fā)的 FastAPI,怎么說(shuō)呢?這個(gè)支持庫(kù)的各個(gè)方面都很 Fast。
這個(gè)用 Python 開發(fā) API 的新框架具有超高性能,而且可以基于 OpenAPI 標(biāo)準(zhǔn)自動(dòng)生成交互式文檔。默認(rèn)支持 Swagger UI 與 ReDoc,允許直接從瀏覽器調(diào)用、測(cè)試 API,從而提高開發(fā)效率。用這個(gè)框架開發(fā) API,真的是又快又簡(jiǎn)單。
該支持庫(kù)還支持現(xiàn)代 Python 優(yōu)秀實(shí)用功能之一:類型提示。FastAPI 在很多方面都使用了類型提示,其中最酷的一個(gè)功能是由 Pydantic 加持的自動(dòng)數(shù)據(jù)驗(yàn)證與轉(zhuǎn)換。
FastAPI 基于 Starlette 開發(fā),性能與 NodeJS 和 GO 相當(dāng),還自帶 WebSocket 與 GraphQL 原生支持。
最后,對(duì)于開源支持庫(kù)而言,它的技術(shù)支持文檔也非常不錯(cuò)。說(shuō)真的,去看一下吧!
4. Immutables
項(xiàng)目網(wǎng)址:
https://github.com/magicstack/immutables
MagicStack 的兄弟回歸了,這次他們帶來(lái)的是一個(gè)簡(jiǎn)單、優(yōu)雅的不可變映射類型(“凍結(jié)字典”)。
這東西的好處在哪兒?呃,希望你能聽得懂下面這句話,Haskell 等函數(shù)編程語(yǔ)言里使用的哈希數(shù)組映射字典樹(HAMT)的底層數(shù)據(jù)結(jié)構(gòu)。最值得注意的是,不管 set() 還是 get() 操作的性能都為 O(log N),且對(duì)于相對(duì)較小的映射,可以達(dá)到 O(1)。
如果你的應(yīng)用里字典的規(guī)模較大,并且想提高一下性能,這個(gè)酷酷的新支持庫(kù)值得一試。
5. Pyodide
項(xiàng)目網(wǎng)址:
https://github.com/iodide-project/pyodide/
Pyodide 是本榜單里最刷三觀的項(xiàng)目。通過(guò) WebAssembly,它把 Python 科學(xué)引入到了瀏覽器界面,把科學(xué)計(jì)算提升到了全新的層面。
想用 Numpy 搞定一些數(shù)字?用 Pandas 處理大型 DataFrame?用 Matplotlib 為計(jì)算結(jié)果進(jìn)行可視化?有了 Pyodide,這些操作在瀏覽器里就可以輕輕松松地實(shí)現(xiàn)了。
這還不算完,還有好消息:這個(gè)庫(kù)可用的 Python 支持庫(kù)已經(jīng)超過(guò)了 35 個(gè),您這是要上天啊。
6. Modin
項(xiàng)目網(wǎng)址:
https://github.com/modin-project/modin
Modin 的口號(hào)是“只改一行代碼,就能加速 Pandas”,沒(méi)錯(cuò),就是這么簡(jiǎn)單。只要安裝 Modin,更改 import 語(yǔ)句,在多核筆記本上,處理數(shù)據(jù)的速度就能提高 4 倍。
我滴個(gè)神 ~~ 這是怎么做到的?Modin 有自帶的 modin.pandas.DataFrame 對(duì)象,這是一個(gè)輕量級(jí)的并行 DataFrame 對(duì)象。因?yàn)榕c Pandas API 兼容,使用這個(gè)對(duì)象就跟是透明的一樣,在后臺(tái),該支持庫(kù)使用 Ray 或 Dask 作為計(jì)算引擎,執(zhí)行分布式數(shù)據(jù)計(jì)算。
有的時(shí)候,獲得更快的速度就是那么簡(jiǎn)單,改一兩行代碼就可以了,Modin 就是證明。
7. Streamlit
項(xiàng)目網(wǎng)址:
https://github.com/streamlit/streamlit
不論機(jī)器學(xué)習(xí)項(xiàng)目多么的超凡脫俗,都免不了要手動(dòng)與模型和數(shù)據(jù)交互的工作。
與其投入無(wú)數(shù)小時(shí),開發(fā)數(shù)千行代碼的應(yīng)用,Streamlit 讓你可以快速搭建用來(lái)分享模型與分析的 APP。構(gòu)建交互式 UI、實(shí)現(xiàn)數(shù)據(jù)可視化、輸出分析模型現(xiàn)在就是小菜一碟。
有了 Streamlit,只要添加幾行代碼,嗖的一下,就能從 Python 腳本代碼飛升為產(chǎn)品級(jí) APP。TensorFlow、Keras、PyTorch、Pandas,只要是你能想到的數(shù)據(jù)科學(xué)工具,Streamlit 都已經(jīng)支持了。
8. Transformers
項(xiàng)目網(wǎng)址:
https://github.com/huggingface/transformers
從事機(jī)器學(xué)習(xí)相關(guān)工作的讀者,一定會(huì)對(duì)過(guò)去的一年中自然語(yǔ)言處理(NLP)領(lǐng)域里的重大突破有所耳聞。
BERT、XLNet、roBERTa 等新涌現(xiàn)出來(lái)的高性能模型已經(jīng)取得了長(zhǎng)足的發(fā)展,尤其是在文本分類、機(jī)器翻譯、命名實(shí)體識(shí)別等眾多 NLP 領(lǐng)域里的高精尖突破層出不窮,讓人眼花繚亂。
對(duì)業(yè)界人士來(lái)說(shuō),找到一款既能在產(chǎn)品級(jí)程序上利用這些模型,又不會(huì)太過(guò)復(fù)雜的工具,尤為重要。對(duì)研究者而言,一個(gè)既不用花費(fèi)太多時(shí)間編寫模板代碼,又能調(diào)校支持庫(kù)內(nèi)核,不斷開發(fā)、實(shí)驗(yàn)新模型的支持庫(kù),也非常重要。
Hugging Face 的小伙伴給我們帶來(lái)了變形金剛(Transformers),這個(gè)支持庫(kù)支持最現(xiàn)代的 NLP 模型打包、預(yù)訓(xùn)練等功能,而且還開箱即用。TensorFlow 2.0 與 PyTorch 之間的互操作,讓該支持庫(kù)達(dá)到了業(yè)界標(biāo)準(zhǔn),完全可以為研究工作與產(chǎn)品級(jí)應(yīng)用程序加持。該支持庫(kù)由研究人員開發(fā),因此,它的更新速度非常快,而且還在不斷引入新式模型。
錦上添花:Hugging Face 團(tuán)隊(duì)開發(fā)了 DistilBERT,這是基于 BERT 提煉出來(lái)的,更小、更快、更省錢、更輕量的版本。
還在猶豫要不要用 Hugging Face 的變形金剛處理現(xiàn)代 NLP 任務(wù)?看到這篇文章就是緣分,快來(lái)試下這個(gè)在線演示,感受變形金剛的魔力吧。
9. Detectron2
項(xiàng)目網(wǎng)址:
https://github.com/facebookresearch/detectron2
Facebook AI 研究團(tuán)隊(duì)(FAIR)在開發(fā)對(duì)象探知、姿態(tài)估測(cè)、語(yǔ)義/實(shí)例分隔、全景分割等模型的同時(shí),不斷將計(jì)算機(jī)視覺(jué)(CV)推向新的高度。
就在短短的幾年前,上述這些技術(shù)就像是科幻小說(shuō)。我們從未對(duì) FAIR 有過(guò)什么期望,但這回他們?cè)僖淮握鸷橙珗?chǎng)。
Detectron2 是 Detectron 的延續(xù),該支持庫(kù)建立在 PyTorch 之上,整合了多種高精尖的計(jì)算機(jī)視覺(jué)算法。
鑒于支持用例類型多種多樣,這類支持庫(kù)的開發(fā)難度特別大。與 Hugging Face 的 Transformers 類似,F(xiàn)AIR 團(tuán)隊(duì)的 Detectron2 真的很強(qiáng)大,其延展性與模塊化的設(shè)計(jì)風(fēng)格,讓它在計(jì)算機(jī)視覺(jué)研究應(yīng)用中獨(dú)領(lǐng)風(fēng)騷。同時(shí),Detectron2 的應(yīng)用極其簡(jiǎn)單,非常適合那些只想快速得到結(jié)果,不想了解核心算法的人。沒(méi)錯(cuò),只要幾行 Python 代碼,就可以通過(guò) Detectron2 讓你開發(fā)的軟件“理解”圖片。
Detectron2 能否形成生機(jī)勃勃的社區(qū),還需要些時(shí)間來(lái)驗(yàn)證,但到目前為止,它的前途還是蠻光明的。很多研究人員都在為 Detectron2 研發(fā)更新、更快、更好的模型,因此,它成為計(jì)算機(jī)視覺(jué)應(yīng)用“首選”解決方案的可能性很大。如果你從事計(jì)算機(jī)視覺(jué)工作,一定要對(duì)這個(gè)支持庫(kù)保持密切的關(guān)注!
10. Metaflow
項(xiàng)目網(wǎng)址:
https://docs.metaflow.org/introduction/what-is-metaflow
Metaflow 這個(gè)支持庫(kù)實(shí)在太新了,差點(diǎn)就沒(méi)趕上 2019 年榜單評(píng)選!但不要因此就小瞧它:別看它 12 月 3 日才正式發(fā)布,其實(shí)它是 Netfilx 兩年精雕細(xì)琢的成果,通過(guò)了長(zhǎng)期內(nèi)部實(shí)測(cè),Netflix 才決定開源。
Metaflow 這個(gè) Python 支持庫(kù)能幫助數(shù)據(jù)科學(xué)家與數(shù)據(jù)工程師開發(fā)在現(xiàn)實(shí)世界中應(yīng)用的實(shí)戰(zhàn)項(xiàng)目。它的目標(biāo)是,減輕非技術(shù)型數(shù)據(jù)科學(xué)家學(xué)習(xí)技術(shù)的負(fù)擔(dān),比如,如何利用計(jì)算資源、怎么實(shí)現(xiàn)并行運(yùn)算、架構(gòu)設(shè)計(jì)、版本控制等。Netflix 與 AWS 合作,讓用戶通過(guò)開箱即用的分布式計(jì)算即可輕松定義復(fù)雜數(shù)據(jù)流。
我們?cè)?Tryolabs 內(nèi)部已經(jīng)評(píng)測(cè)了幾個(gè) Metaflow 核心項(xiàng)目。如果你也對(duì)這個(gè)工具感興趣,請(qǐng)參閱 Netflix 博客的發(fā)布貼。
結(jié)論
這一年,或者說(shuō)又一個(gè)10 年馬上就要過(guò)去了,開源社區(qū)這些年的對(duì)世界的貢獻(xiàn)將對(duì)今后幾年產(chǎn)生深遠(yuǎn)的影響。