原作者:laixintao
原文發於作者個人部落格,點選檢視原文,掘金已獲得轉載授權。再次感謝作者。
導讀:上個月的 PyCon 有 170 多個視訊在 Youtube 上,網友 @laixintao 寫了個簡單看後感,目前包括對如下幾個演講的回顧:Python 依賴管理的未來?importlib.resources in Python3.7;Pythoner 為什麼要了解 Systemd?命令列 UI 也需要設計。
1. Python 依賴管理的未來?
像 npm 這種工具一般都會產生 .lock
檔案的,將版本鎖死。Python 並沒有這種 lock 檔案,這樣的話我們部署的時候就有不確定性,可能最終的環境會和預期不一致(What do you want 和 What do you need 的問題)。有一種方案就是 pip freeze > requirements.txt
,但是這種匯出的依賴是扁平的,你不是一個包是你專案的依賴,還是你所依賴的 Flask 的依賴的依賴。
所以就有了 Pipenv,使用它來安裝,就會產生一個 Pipfile,放著人類可讀的依賴包,每次安裝之後就會自動產生一個 .lock
檔案,是一個 json 格式的檔案,對機器處理很友好。每一個依賴都帶有 sha256 hash,可以將最終部署的環境鎖定。此外,Pipenv 還帶有很多非常 Nice 的功能,比如畫依賴圖、管理 venv、切換 Python 版本等等。需要注意的是,這和 setup.py
是完全不一樣的東西,一個是應用的依賴管理,一個是庫的打包(這個好問題是最後一位觀眾提出的)。
推薦指數:5 (講了Python打包的歷史,現場帶有Nice的演示,所有的問題都有滿意的回答,演講思路清晰)
演講者:Kenneth Reitz(requests作者,應該所有的 Pythoner 都知道這個人吧),演講5天前剛從 Heroku 跳槽到 DigitalOcean。
Youtube:Kenneth Reitz – Pipenv: The Future of Python Dependency Management – PyCon 2018
2. importlib.resources in Python3.7
目前來說,如果你想在你的庫或者應用中新增靜態檔案(類似分詞這種後設資料的話),方法是放到一個目錄中,然後在程式碼中拼出來路徑,開啟並讀取這個檔案。首先這樣程式碼冗長(雖然Python來寫只需要5行左右)但是依然很長,並且如果你的程式是從 zip 檔案中執行的話,那麼就有問題了,你開啟檔案的時候並不會有這個系統路徑存在。
所以 LinkedIn 的 Warsaw (這個庫主要是他們開發的)給出了一個 Talk 介紹 Python3.7 中新增的 importlib.resource
庫的解決方案:在靜態檔案所在的資料夾新增一個 __init__.py
檔案,那麼這個資料夾就變成了一個“module”,使用 importlib.resources
中只要是可以 import 的 module,那麼這個 module 中的靜態檔案就可以通過 importlib
來讀取。解決了 zip 檔案的情況,還提供了很多 API,還有一些效率上的提升。以後的程式中感覺用這種方式載入靜態檔案比較靠譜。
推薦指數:3
演講者:Warsaw from Linkedin
相關專案:github.com/linkedin/sh…,importlib.resources
Youtube: Barry Warsaw – Get your resources faster, with importlib.resources – PyCon 2018
3. Pythoner為什麼要了解Systemd?
Instagram 是業界有名的 Python 使用者,他們的部落格經常會發表乾貨,演講也通常價值很高。不過這個 talk 感覺沒有發揮出 Instagram 一貫的水平啊,嘉賓嗓子有點沙啞,加上口音,聽懂的難度有點大,理解萬歲哈哈。
內容是關於 Systemd 的,教你如何將 Python 程式作為系統的 service 來管理,涉及了服務管理的小歷史,這部分是一個不錯的 Systemd 入門教程吧。後半部分推銷了 facebook 的一個專案。
pystemd 是一個 libsystemd 的 Python wrapper,提供了很多不錯的 feature,例如執行一個命令時,將整個系統變成 Read-only 的;或者提供一個與系統的 tmp
相隔離的 tmp
; 或者提供一個網路的 firewall,限制只有特定的 IP 可以訪問等;或者限制 CPU 和記憶體等資源的使用,之前我想實現一個多租戶的 Python 環境,這個庫看起來可以滿足我大部分的需求。當然,基本也有所有 systemd 的相關操作。後面 Demo 部分很不錯,雖然最後一個貌似失敗了。
推薦指數:4
演講者:Alvaro Leiva Geisse from Instagram & Facebook
相關專案:systemd,pystemd
Youtube:Alvaro Leiva Geisse – Systemd: why you should care as a Python developer – PyCon 2018
4. 命令列UI也需要設計
這是去年的 PyCon 的視訊,最近從“稍後觀看”裡面找到的,發現自己還沒看完,就順帶看了。
黑乎乎的命令列並不是沒有UI了,相反,UI的複雜程度不亞於GUI,也需要精心的設計。我使用 PostgreSQL 和 MySQL 從沒依賴過 GUI, 因為 mycli 和 pgcli 實在是太方便了。命令歷史,自動補全,顏色,拿什麼 GUI 跟我換我都不換!這兩款專案的作者來自 Amjith Ramanujam 來自 Netflix,演講也很精彩。
命令列不像GUI,GUI上面如果有什麼新 feature,就會有一個新的選項或者 icon,使用者就知道了。但是命令列呢,要麼花時間讀手冊,要麼你有個不錯的朋友跟你說一些技巧,不然你很難發現一些實用的 feature。這裡演講者舉了幾個例子,有時候你要想辦法讓使用者見到這些 nice feature。
第二點,注意力要放在使用者身上,首先想到怎麼用最好,而不是首先想到難以實現。這裡作者提到實現 mycli 的時候,要做到根據資料庫的資料自動提示,但是市面上並沒有開源的 SQL 引擎,要自己寫一個工作量和難度實在太大了,但是作者也實現了。
第三點,配置是罪惡之源,只留給使用者去配置一些主觀的東西,比如顏色。其他的不要去讓使用者決定。
最後就是一段演示了,展示了怎麼寫命令列GUI,雖然寫了十幾行而已,但是已經完爆很多 REPL 了。
推薦指數: 4
演講者:Amjith Ramanujam from Netflix
相關專案:mycli,pgcli,fish-shell,bpython,prompt_toolkit
Youtube:Amjith Ramanujam Awesome Command Line Tools PyCon 2017
先發這些吧,後面遇到好看的繼續更,大家如果看到質量高的也歡迎推薦。2018年貌似有170多個視訊,全部看完要好久,一起看的話大家可以互通質量,節省時間啊。