聖誕將至,又到了年終盤點時間,Tryo Labs 和去年一樣又推出了一份 2016 年十大 Python 庫的榜單。對於這份榜單的篩選條件,Tryo Labs 寫道:「我們避開了 Django、Flask 等已經成為今天的標準庫的已經成功的專案。另外,這個榜單中有的庫是 2016 年之前建立的,但它們在今年的受歡迎度出現了暴增或我們認為它們非常好所以可以進入這個榜單。」下面是榜單詳情:
1. Zappa
連結:https://www.zappa.io/
自 AWS Lambda(以及後續的其它專案)釋出以來,人們的關注點就全部轉移到了無伺服器架構上。這些架構讓我們可以將微服務(microservice)部署到雲端、部署到一個完全可管理的環境中;在這樣的環境中,人們不用關心管任何伺服器,而只需要分配無狀態的、短暫的計算容器(computing container)即可——一個服務提供商即可完全管理。通過這一正規化,事件(比如流量尖峰)可以觸發更多這些容器的執行,因此有可能能夠處理「無限的」水平擴充套件。
Zappa 是一個用於 Python 的無伺服器框架,儘管(至少目前)它僅支援 AWS Lambda 和 AWS API Gateway。它使得開發這樣架構的應用變得非常簡單,能將你從使用 AWS Console 或 API 的繁瑣配置工作中解放出來,而且它還有各種用於簡化部署和管理不同環境的命令。
2. Sanic + uvloop
連結:
Sanic: https://github.com/channelcat/sanic
uvloop: https://magic.io/blog/uvloop-blazing-fast-python-networking/
誰說 Python 不能很快?Sanic 不僅有可能是有史以來最好的軟體庫名字,也可能是有史以來最快的 Python 網頁框架,而且似乎也遠遠超過其它框架。它是一個專為速度而設計的類 Flask 的 Python 3.5+ 網頁伺服器。另一個庫 uvloop 是一個用於 asyncio 的事件迴圈(event loop,其底層使用了 libuv)的超快速的外掛替代。這兩個加起來就是一個強大的組合!
根據 Sanic 的作者的基準測試,uvloop 可以驅動 Sanic 每秒處理超過 3.3 萬條請求,這實在太強了!(比 node.js 還快)。你的程式碼可以受益於這種新的 async/await 語法——它們會看起來很整潔;此外我們也喜歡 Flask 風格的 API。你一定要試試 Sanic,而且如果你也在使用 asyncio,你也可以無需太多修改你的程式碼就能受益於 uvloop。
3. asyncpg
連結:https://github.com/MagicStack/asyncpg
跟進 asyncio 框架的最新進展,來自 MagicStack 的人為我們帶來了這個高效的非同步(目前只支援 CPython 3.5)資料庫介面庫,其是專門為 PostgreSQL 設計的。它有零相關性,這意味不需要安裝 libpq。相對而言,withpsycopg2(最流行的 Python 的 PostgreSQL 介面卡)需要以文字格式與資料庫伺服器交換資料;而 asyncpg 則實現了 PostgreSQL 二進位制 I/O 協議,這讓其不僅支援通用型別,而且還有其它許多效能上的好處。
其基準是很清楚的:asyncpg 平均至少比 psycopg2(或 aiopg)快 3 倍,也比 node.js 和 Go 實現更快。
4. boto3
連結:https://github.com/boto/boto3
如果你的基礎設施部署在 AWS 上或使用了它們的服務(比如 S3),那麼你應該非常樂意看到 boto(用於 AWS API 的 Python 介面)被從頭到尾完整重寫了。而且你不用一次性就完全遷移你的應用:你可以同時使用 boto3 和 boto(2) ;比如僅在你應用中新的部分使用 boto3。
這個新的實現在不同的服務間會一致的多,而且因為其使用了資料驅動的方法來在執行時間(runtime)從 JSON 描述檔案中生成類,所以其總是可以實現快速更新。再也不用滯後於新的 Amazon API 功能了,趕緊使用 bot3 吧!
5.TensorFlow
連結:https://www.tensorflow.org/
大名鼎鼎的 TensorFlow。自從谷歌在 2015 年 11 月釋出以來,這個庫已經獲得了很多改進,它已成為時下最流行的 GitHub Python 庫。簡而言之,TensorFlow 是一個使用資料流圖(data flow graphs)的數值計算庫,可以在 GPU 或 CPU 上執行。
在過去一年裡,我們目睹了 TensorFlow 在機器學習社群中掀起了一股新風潮(特別是在深度學習領域),它不僅出現在研究領域,而且在應用領域也非常常見。如果你正在做深度學習並想在高階別介面中使用它,你可以嘗試以它為後端的 Keras 或新推出的 TensorFlow-Slim。
6.gym+universe
Gym:https://gym.openai.com/
Universe:https://universe.openai.com/
如果你是人工智慧圈內的人,肯定聽說過非營利人工智慧研究公司 OpenAI。他們的研究人員在今年開源了一些 Python 程式碼。Gym 是一個用於開發並比較強化學習演算法的工具包。它包含一個開源庫,這個庫收集了一些可被用於測試強化學習演算法的測試問題(環境)。它還包含一個站點與 API,能讓你對比訓練出的演算法(代理,agent)的表現。因為它不在乎代理的實現方式,你可以選擇使用自己的計算庫建立代理:numpy、TensorFlow、Theano 等。
他們最近也釋出了 Universe,這是一個用於研究通用人工智慧在跨遊戲、網頁和其他應用上的表現的軟體平臺。Universe 能完美匹配 gym,因此它能讓任何真實世界應用調整進 gym 環境中。研究人員希望這一無限的可能效能夠加速對智慧代理的研究,從而解決通用任務。
7.Bokeh
連結:http://bokeh.pydata.org/
你可能熟知一些提供資料視覺化的 Python 庫,其中最流行的就是 matplotlib 和 seaborn。然而,Bokeh 被創造用來做互動視覺化(interactive visualization),並且面向現代的網頁瀏覽展示。這意味著 Bokeh 能創造出一個可以讓你探索來自網頁瀏覽器資料的情節(plot)。比較棒的是它緊密融合了 Juptyer Notebooks,所以你能使用它配合你的專業工具進行研究。它也有一個可選的伺服器元件 bokeh-server,其帶有許多強大的功能,比如在伺服器端對大型資料集進行下采樣、流傳輸資料、變換等。可點選網址 http://bokeh.pydata.org/en/latest/docs/gallery.html 檢視案例,看起來很棒。
8.Blaze
連結:https://blaze.readthedocs.io/en/latest/index.html
有時候,當你對資料集執行分析時,卻發現資料集過大,無法一次塞進計算機 RAM 中。如果你無法依賴 numpy 或 Pandas,你通常需要轉而使用其他的工具,如 PostgreSQL、MongoDB、Hadoop、Spark 等等。這些工具都有其自身的優缺點,依照任務的特點,總有一種工具是適合你的。但決定轉換工具是一項巨大的工程,因為你需要了解這些系統如何工作,以及如何以正確的形式插入資料。
Blaze 提供了一個統一的介面,讓使用者無需學習所有資料庫技術。Blaze 庫的核心是一種計算表達方式。Blaze 本身不會進行任何計算:它只是知道如何指定一個特定的後端,決定誰來執行任務。Blaze 還有其它很多功能(它形成了一個生態系統),它作為一個庫被開發出來。例如,Dask 實現了一個可用於 NumPy 陣列的外掛,可以處理大於記憶體的內容和利用多核處理器,並且還具有動態任務排程能力。
9.Arrow
連結:https://github.com/crsmithdev/arrow
有一個流行的說法,在電腦科學領域只有兩個大問題:無效快取和命名。我認為這句話忽略了另一個大問題:管理資料時間(managing datetimes)。如果你曾經試圖在 Python 中管理資料時間,你就會知道標準庫裡有巨量的模組和型別:datetime、date、 calendar、 tzinfo、 timedelta、 relativedelta、 pytz 等等。更糟糕的是,時區都自然設定為預設值。
Arrow 為開發者提供了「人類的時間(datetime for humans)」,提供了一種清晰的方法來建立、操作、格式化和轉換日期、時間和時間戳。它可以用於替換 Python 2 和 3 的 datetime 型別,並提供了一個更友好的介面,同時加入新的功能(如 humanize)彌補了原系統的不足。即使你不需要 Arrow 提供的額外功能,使用它也可以大大減少程式碼中的引用。
10. Hug
連結:http://www.hug.rest/
公開你的內部 API,這樣可以大大簡化 Python API 的開發過程。Hug 是一個僅限於 Python3 的庫,提供在 Python 中建立 HTTP REST API 的最簡單的方式。它不是一個 web 框架(雖然 Hug 提供這樣的功能,而且表現很好),它的主要功能是公開正確的標準內部 Python API。這個想法非常簡單:一次定義邏輯和結構,並且可以通過多種方式公開你的 API。目前,它支援公開 REST API 或命令列介面。
你可以使用型別註釋(type annotations),讓 Hug 不僅為你的 API 生成檔案,同時提供驗證和明確的錯誤訊息,這可以讓你的開發工作(和你的 API 使用者的工作)變得輕鬆很多。Hug 構建在 Falcon 的高效能 HTTP 庫之上,這意味著你可以使用任何 wsgi 相容的伺服器(例如 gunicorn)將其部署到生產環境中。