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