這是第五屆 Python 類庫 Top 10 年度榜。在這里,你會發(fā)現(xiàn)一些隱藏在開源世界中的珍寶,它們能讓你開始著手新的項目,或者讓你現(xiàn)有的項目更加有趣。從這份榜單里,你既能找到機(jī)器學(xué)習(xí)的庫,也能找到非機(jī)器學(xué)習(xí)的庫,所以它在各方面均有所涉及。
1. HTTPX
如果你是一名經(jīng)常與 api 交互的 Python 死忠粉,可能會很熟悉 requests 類庫。然而,異步范式在高性能現(xiàn)代應(yīng)用程序中越來越常見,如果你使用的正是異步范式,requests 可不會給你帶來什么好處。
為了解決這個問題, Tom Christie 和他的合作者為我們帶來了 HTTPX,它是用于下個十年的新一代異步 HTTP 客戶端。
HTTPX 延續(xù)了 requests 的用法,為你提供了標(biāo)準(zhǔn)特性以及 HTTP/2 和 HTTP/1 支持。除此之外,還包括使用 ASGI 協(xié)議直接調(diào)用 Python Web 應(yīng)用程序以及完全類型注解等其他特性。
你需要同時發(fā)出大量請求?那么 HTTPX 就是新的首選。
注意:目前仍在 alpha 版本中考慮 HTTPX,現(xiàn)只作為異步客戶端開發(fā)。在未來,將再重新引入同步客戶端。
2. Starlette
Starlette 是一個輕量級的 ASGI 框架 / 工具包,具有包括 WebSocket 和 GraphQL 支持,進(jìn)程內(nèi)后臺任務(wù)和真正的高性能等一系列特性。除此之外,還有 100% 類型注解的代碼庫和無依賴??梢园阉醋魇且话娣浅]p量的、現(xiàn)代的和異步的 Flask 。
你還可以靈活地選用它,決定是將其作為一個完整的 web 框架來使用,還是僅僅作為一個 ASGI 工具包來使用。
它運行在一個 ASGI 服務(wù)器上,比如 uvicorn ,它去年也排進(jìn)了 Top 10。如果你正在考慮開發(fā)一款新的 Web 應(yīng)用程序,那么你一定要給 Starlette 一個嶄露頭角的機(jī)會。
3. FastAPI
Starlette 很棒,但它非常簡約,且非常開放。這給了你很大的自由,但有時,你只是需要一個把事情做得又對又快的框架。
Sebastian Ramirez 的 FastAPI 正是這樣的一款框架。無論在哪層意義上講,它都可稱得上快。
這款新框架基于的是 OpenAPI 標(biāo)準(zhǔn),用于構(gòu)建具有 Python 高性能特性和自動交互文檔的 API。它默認(rèn)支持 Swagger UI 和 ReDoc ,使你能夠直接從瀏覽器調(diào)用和測試你的 API,從而加快開發(fā)時間。使用此框架構(gòu)建 API 既快速又簡單。
這個庫還利用了現(xiàn)代 Python 的最佳實踐之一:類型提示。FastAPI 在很多方面都使用類型提示,但是最酷的特性之一是由 Pydantic 提供支持的自動數(shù)據(jù)校驗和轉(zhuǎn)換。
FastAPI 是基于 Starlette 構(gòu)建的,其性能與 NodeJS 和 Go 相當(dāng),而且它還支持原生 WebSocket 和 GraphQL。
最后,但并非最不重要的是,它擁有一些為開源庫編寫的最好的技術(shù)文檔。說真的,強(qiáng)烈建議看一看。
4. Immutables
MagicStack 的工作人員回歸,他們使用了簡單優(yōu)雅的不可變映射類型 (“凍結(jié)的字典”)。
誰能從中受益呢?其底層數(shù)據(jù)結(jié)構(gòu)是一個哈希數(shù)組映射的字典樹 (HAMT),在 Haskell 等函數(shù)式編程語言中使用。最有趣的是,對于 set() 和 get() 操作,它們都提供了 O(log N) 性能,對于相對較小的映射來說其實就是 O(1)。
如果你的應(yīng)用程序使用了更大的字典,可以使用 bump 提高性能,這個酷酷的新庫可以值得關(guān)注。
5. Pyodide
Pyodide 是一個真正能讓你大吃一驚的項目。它使用 WebAssembly 將 Python 科學(xué)棧引入瀏覽器,將科學(xué)計算提升到了一個全新的水平。
想要用 NumPy 處理一些數(shù)字嗎?使用 Pandas 處理一些較大的數(shù)據(jù)流?使用 NumPy 標(biāo)制結(jié)果?幸有 Pyodide,現(xiàn)在你可以在瀏覽器中輕松實現(xiàn)所有這些功能,甚至更多。
除此之外,更好的消息是:它的 packages 目錄列出了超過 35 個當(dāng)前可用的包。不夸張地說,天空是其唯一限制。
6. Modin
Modin 的座右銘是通過改變一行代碼來擴(kuò)展你的 Pandas 工作流程,真的,就這么簡單。只需安裝 Modin,改變你的導(dǎo)入語句,在當(dāng)下?lián)碛卸嗪颂幚砥鞯墓P記本電腦上就能獲得高達(dá) 4 倍的速度優(yōu)勢。
它是怎么做到的?現(xiàn)在來揭曉這個秘密。Modin 實現(xiàn)了自己的 modin.pandas.DataFrame 對象,它是一個輕量級并行 DataFrame。這個對象的使用是透明的,因為它與 Pandas 是 api 兼容的,并且它是在后臺運行的,它將使用 Ray 或 Dask 之類的計算引擎來分發(fā)數(shù)據(jù)和計算。
有時候,只需要對你的代碼做一些小的修改就能使速度獲得極大的提升,Modin 就是個很好的證明。
7. Streamlit
在每個重大的機(jī)器學(xué)習(xí)項目中,都有一個你最終需要與模型和數(shù)據(jù)進(jìn)行手動交互的時間點。與花費數(shù)小時和數(shù)千行代碼開發(fā)應(yīng)用程序不同,Streamlit 使你能夠快速構(gòu)建應(yīng)用程序來共享你的模型和分析?,F(xiàn)在,創(chuàng)建一個與你的數(shù)據(jù)和模型的輸出進(jìn)行交互和可視化的 UI 簡直易如反掌。
Streamlit 提供了一種從 Python 腳本跳到生產(chǎn)級應(yīng)用程序的快速方法,只需在代碼中添加幾行即可。
Streamlit 能與各種數(shù)據(jù)科學(xué)相關(guān)的工具一起工作, TensorFlow 、 Keras 、 PyTorch 、 Pandas ,凡是你能想到的,它都可以。
8. Transformers
如果你正在從事任何與機(jī)器學(xué)習(xí)相關(guān)的工作,那么你可能已經(jīng)聽說了在過去一年中圍繞自然語言處理 (NLP) 方面的重要進(jìn)展。
許多新的和高性能的模型,如 BERT 、 XLNet 或者 roBERTa ,已經(jīng)被開發(fā)出來,通過各種 NLP 任務(wù) (如文本分類、機(jī)器翻譯、命名實體識別等) 來顯著提高技術(shù)水平。
對于實踐者來說,重要的是擁有能夠使用這些模型來支撐生產(chǎn)應(yīng)用程序的工具,這些用起來并不復(fù)雜。對于研究人員來說,重要的是擁有能夠調(diào)整內(nèi)部機(jī)制的類庫,這樣就可以更輕巧地開發(fā)和試驗新的模型,而不必浪費太多時間編寫樣板代碼。
Hugging Face 有一幫杰出的人,他們?yōu)槲覀儙砹?transformers ,它是一個類庫,其中包括打包、預(yù)先訓(xùn)練,并已經(jīng)為使用最現(xiàn)代的 NLP 模型的實現(xiàn)做好了準(zhǔn)備。TensorFlow 2.0 和 PyTorch 之間的互操作性幫助該類庫迅速成為行業(yè)標(biāo)準(zhǔn),支撐著研究和生產(chǎn)應(yīng)用程序。它們的發(fā)展速度也非??欤S著研究人員的開發(fā),經(jīng)常有新的模型引入到這個類庫中。
蛋糕上的櫻桃: Hugging Face 團(tuán)隊開發(fā)了 DistilBERT ,它是一個體積更小、速度更快、價格更低、重量更輕的純凈版 BERT。
你還在猶豫要不要使用 Hugging Face / Transformer 以切換到現(xiàn)代的 NLP?那么擇日不如撞日,今天就是你的幸運日,看看他們偉大的在線演示,可不要吝惜你的大姆指喲。
9. Detectron2
Facebook 的人工智能研究團(tuán)隊 (FAIR) 一直在推動計算機(jī)視覺 (CV) 的極限,他們開發(fā)了新的模型,用于像對象檢測、姿式預(yù)估、語義 / 實例劃分,以及最近的全景分割等任務(wù)。
解決這些問題的可能性就像幾年前的科幻小說一樣。我們對 FAIR 抱有最好的期望,這一次他們設(shè)法再次震撼全場。
Detectron2 是備受期待的 Detectron 續(xù)作,它是用 PyTorch 從頭開始構(gòu)建的,裝滿了最先進(jìn)的計算機(jī)視覺算法。
這樣的類庫尤其難于進(jìn)行工程設(shè)計,因為它們必須支持不同類型的用例。就像 Hugging Face 的 Transformers 一樣,費爾團(tuán)隊也很好地完成了 Detectron2 的設(shè)計,它采用了一種非常靈活和模塊化的方式,使得它非常適合 CV 的研究應(yīng)用。同時,它的使用極其簡單,對于那些只想快速獲得結(jié)果而不想干預(yù)內(nèi)部機(jī)制的人來說非常理想。是的,你可以使用 Detectron2,讓你的軟件只用幾行 Python 代碼就能“理解”圖像。
時間將會告訴我們,Detectron2 能否成功地營造一個充滿活力的社區(qū),而到目前為止,情況看來很有希望。它很可能成為 CV 應(yīng)用程序的“首選”解決方案,因為在 CV 應(yīng)用程序中,新的、更快、更好的模型是由研究人員創(chuàng)建的。如果你正在做任何類型的 CV 工作,一定要密切保持關(guān)注!
10. Metaflow
前方出現(xiàn)一個新生兒,一幅新面孔勉強(qiáng)擠進(jìn)了 2019 年的名單!但是贊成別不把它當(dāng)回事:盡管它才是在幾周前剛剛發(fā)布的,但已經(jīng)經(jīng)過了 Netflix 的內(nèi)部測試,歷經(jīng)兩年時間的改進(jìn),他們才決定開放源代碼。
Metaflow 是一個 Python 類庫,用于幫助數(shù)據(jù)科學(xué)家和工程師構(gòu)建用于現(xiàn)實世界的真實項目。它主要專注于減輕非技術(shù)數(shù)據(jù)科學(xué)家的技術(shù)負(fù)擔(dān),例如計算資源、并行執(zhí)行、體系結(jié)構(gòu)設(shè)計和版本控制等。Netflix 與 AWS 的合作,使你能夠輕松定義復(fù)雜的數(shù)據(jù)流,同時對分布式計算提供開箱即用的支持。
我們已經(jīng)在為 Tryolabs 內(nèi)部的一些關(guān)鍵項目做了 Metaflow 評估。如果你有興趣更多地了解這款工具,請查看 Netflix 的公開博客。
總結(jié)
這一年又過去了,它為開源世界留下了非凡的貢獻(xiàn),這些貢獻(xiàn)在未來幾年仍將具有重要意義。你可以查看我們之前榜單:看看 2015 年、 2016 年、 2017 年、 2018 年來類庫的演變。
如果我們漏掉了你最喜歡的 Python 類庫,請在下面發(fā)表評論。我們很想聽聽你的意見。
作者介紹
Fabián Torres,全棧開發(fā)人員。電氣工程學(xué)士學(xué)位;Elias Masquil,全棧開發(fā)人員;Alan Descoins,首席技術(shù)官和合作伙伴,計算機(jī)工程學(xué)士學(xué)位;German Hoffman,全棧開發(fā)和研究工程師,計算機(jī)工程學(xué)士學(xué)位。






