作為一門語言,你知道 Python 是如何獲得現在的成功的嗎? 不妨去看看它大量的庫吧,不管是原生的,還是第三方的,可能會有所收穫。
有這麼多的庫,也就不奇怪為什麼有的很多人用,有的卻沒有引起多少人注意。 而且,專注於一個領域的程式設計師往往並不知道那些看起來是為其他工作型別建立的庫能給他們帶來什麼好處。
這裡有 13個你可能已經忽略,但絕對值得你的注意的優秀的 Python 庫。 是時候給這些隱藏的寶藏一些關注了。
1、Pillow
簡介:影象“無痛”處理庫,易用版的 PIL。
亮點:大多數執行過影象處理的 Pythonist 應該會熟悉 PIL(Python 影象庫),但 PIL 有不少缺點和限制,並且很少更新。Pillow 的目標是比 PIL 更容易使用,並通過最小的變化與 PIL 程式碼相容。 擴充套件包括用於與本機 Windows 的映像功能和 Python Tcl/Tk-backed Tkinter GUI 包。
Pillow 在2017年初發布了 4.0 版本,增加了許多變化,主要是針對內部結構,但同時也更新了 Pillow 使用 的 FreeType 和 OpenJpeg 等最新版本的依賴庫。
2、Gooey
簡介: 一條命令,將命令列程式變成一個 GUI 程式。
亮點:Gooey 論證了 argparse 命令列解析庫期望的引數,並把它們作為 GUI 形式呈現給使用者,所有選項都使用適當的控制元件(例如多選項引數的下拉選單等)進行標記和顯示。 假設你已經在使用 argparse,只需要很少的附加編碼 – 一個單獨的 include 和一個單獨的 decorator ,就能使其工作。
3、Peewee
簡介:一個輕量級的 ORM,支援 SQLite、MySQL 和 PostgreSQL,提供多種擴充套件。
亮點:ORMs 目前並沒有什麼很大的聲譽,有些人寧願把圖式模型放在資料庫端做。 但一個結構良好的 ORM 對於不想去觸碰資料庫的開發人員來說,是一個十分不錯的選擇。Peewee 模型易於構建、連線和操作,並且內建了許多常見的查詢操作函式(如分頁)。還有豐富的功能可作為載入項,包括其他資料庫的擴充套件、測試工具 – 甚至 ORM haters 可能會很愛的一個功能 – 模式遷移系統。
4、Scrapy
簡介:一個快速、高階的螢幕抓取及 web 爬蟲框架。
亮點:Scrapy 保持整個爬取過程簡單。 建立一個類,並定義你要刪除的專案的型別,並編寫一些關於如何從頁面中提取資料的規則。結果將以 JSON、XML、CSV 或許多其他的格式匯出。收集的資料可以儲存為 raw,也可以在匯入時進行清理。 此外,Scrapy 可以擴充套件允許許多其他行為,例如網站登入處理、會話 cookie 處理。 影象也可以被 Scrapy 自動提取並與被抓取的內容相關聯。
5、Apache Libcloud
簡介:一個為各種雲設計的 Python 庫,通過單一、一致和統一的 API 訪問各個雲提供商。
亮點:如果上面關於 Apache Libcloud 的描述沒有讓你有摩拳擦掌想去體驗的衝動,沒關係。 雲提供商都喜歡以他們自己的方式做事情 – 有時巧妙,有時不是 – 所以有一個統一的機制來處理幾十個提供商和相關的方法來操縱他們的資源是一個福音。 API 可用於計算、儲存、負載平衡和 DNS,支援 2.x 和 3.x 的 Python 風格。 對於那些為了額外的效能使用 Python 的 PyPy 版本的,也能被很好地支援。
6、Pygame
簡介:一個高可移植性的遊戲開發模組。
亮點:如果你認為除了身處遊戲開發世界的,其他人不會想要這樣的框架,那還請再重新思考一下。 Pygame 提供了一個方便的選項來處理許多面向 GUI 的行為:繪製畫布和 sprite 圖形、處理多聲道聲音、處理視窗和點選事件、 碰撞檢測等等。 不是每個應用,或者可以說不是每個 GUI 應用,在使用 Pygame 構建時都能受益,但仔細看看它提供了什麼,你可能會感到驚訝。
7、NumPy
簡介:科學計算和數學工作基礎包,包括統計學、線性代數、矩陣數學、金融操作等等。
亮點:Quant 和 bean 計數器已經瞭解 NumPy 並且喜歡它,但 NumPy 的數學 ‘n’ 統計的應用範圍比你想象的更廣。 例如,它是向多維陣列新增對 Python 支援的最簡單、最靈活的方法之一。 NumPy 提供了許多高階的數值程式設計工具,如:矩陣資料型別、向量處理,以及精密的運算庫,專為進行嚴格的數字處理而產生,和稀疏矩陣運算包 Scipy 配合使用更加方便。
8、Sh
簡介:一個完備的 subprocess 替代庫,能呼叫 subprocess 中的任意外部程式,並將結果返回到 Python 應用。
亮點:在任何相容 Posix 的系統上,Sh 都是一個神器。 這意味著在這些平臺上可用的所有命令列程式都可以使用 Python。 你不僅不再需要重新造輪子,還不用再為如何優雅地新增該功能到你的應用上而努力。 值得注意的是:該庫對於通過此庫傳遞的引數沒有清理界限,請確保不要將原始使用者輸入傳遞。
9、Python-docx
簡介:以程式設計方式建立和操縱 Microsoft Word .docx 檔案。
亮點:理論上,編寫用於建立和操縱 XML-style Microsoft Word 文件的指令碼應該很容易。 但在實踐中,由於 .docx 格式的內部複雜性,其實還真沒那麼簡單。 Python-docx 允許通過提供一種高階的、程式設計的方式來建立 .docx 檔案,從而完成所有的相關操作。
文字、影象、樣式和文件都可以通過庫的 API 新增和更改。 該庫還允許更改現有文件。不過某些功能仍然不受支援, 例如不能新增或更改標題和腳註 – 但 Python-docx 盡最大努力保留了這些東西,即便它們還不能被操縱。
10、PyFilesystem
簡介:一個為所有檔案系統提供的通用 Pythonic 介面。
亮點: PyFilesystem 背後的基本理念非常簡單:“以同樣的方式抽象整個檔案系統”。它是檔案系統的抽象層。實際上,任何包含檔案和目錄的東西(硬碟、壓縮檔案、FTP伺服器等等)都可以封裝成一個共同的介面,甚至彼此疊加組合。使用這個模組,你可以不需要知道檔案確切的物理位置。
除了使編寫用於操作檔案的跨平臺程式碼變得更容易外,PyFilesystem 還省去了將來自標準庫(主要是 os 和 io)的不同部分的東西拼湊在一起的步驟。
11、EbookLib
簡介:一個用於處理 EPUB2 / EPUB3 和 Kindle 格式圖書的電子書庫。
亮點: 建立電子書通常需要使用各種命令列或其它工具, EbookLib 提供了管理工具和 API 來簡化該過程。 它適用於 EPUB2 和 EPUB3 檔案,與 Kindle 的支援正在開發中。
提供影象和文字(後者以HTML格式)後,你可以將這些片段組裝成一個電子書,包括章節、巢狀目錄條目、影象、HTML標記等。 還支援封面、書脊和樣式表資料。 外掛系統允許第三方擴充套件。
如果你不需要像 EbookLib 這樣樣的東西,可以看看 Mkepub,它提供基本的電子書裝配功能,整個庫只有幾千位元組,但也包含新增影象到文件的功能。 Mkepub 的一個小缺點是它需要 Jinja2,而後者又需要 MarkupSafe 庫。
12、Cython
簡介:Python 的 C 語言擴充套件工具,使用型別混合使 Python 編譯成 C 模組來獲得效能的提升。
亮點:Python 有很好的便利性,但這種方便是以效能為代價的。 C 是執行時效能的黃金標準(限制程式集),但可能難以處理。 Cython 對著二者進行挖掘 – 不僅提供一個 Python 訪問 C 庫的方便選項,還允許 Python 程式碼轉換為高效能 C 程式碼。 它在科學計算中廣泛使用,但它也可以用於各種應用的加速。
這個轉換過程中的最好的部分是你不必一次做所有事情。 可以先從 Python 程式碼開始,使用 Cython 編譯它,以獲得適度的效能提升。 為了進一步加速,再可以使用型別註釋來裝飾變數和函式,這個過程不會比使用 Python 的 PEP 484 型別提示系統更復雜(儘管 Cython 的語法不同)。
13、Behold
簡介:一款強大的支援 print-style 的除錯工具。
亮點:對於大多數語言來說,有一個很簡單的除錯方法:插入 in-line “print” 語句。 Python 也不例外,即使是在大型專案,也有不少人這麼做。 但簡單的 print-debugging,很難在大型、多模組的專案中獲得有用的結果。
Behold 提供了一個用於通過 print 語句進行上下文除錯的工具包。 它允許對輸出施加統一的外觀,對結果進行標記,以便可以通過搜尋或過濾器對其進行排序。並且跨模組提供上下文,以便可以在另一個模組中正確除錯來自某個模組的函式。Behold 可以處理許多常見的 Python 特定場景,如 printing 物件的內部字典、揭露巢狀的屬性、儲存和重用結果、在除錯過程中的其他點進行比較等等。