Python 潮流周刊#39:Rust 開(kāi)發(fā)的性能超快的打包工具
△ △ 請(qǐng)給“ Python貓 ”加星標(biāo) ,以免錯(cuò)過(guò)文章推送

你好,我是貓哥。這里每周分享優(yōu)質(zhì)的 Python、AI 及通用技術(shù)內(nèi)容,大部分為英文。本周刊開(kāi)源,歡迎投稿[1]。另有電報(bào)頻道[2]作為副刊,補(bǔ)充發(fā)布更加豐富的資訊,歡迎關(guān)注。
??文章&教程
1、uv:Rust 開(kāi)發(fā)的 Python 打包工具[3]
Ruff 所屬團(tuán)隊(duì)用 Rust 開(kāi)發(fā)的一個(gè)利器:Python 的包解析與安裝器uv !它被設(shè)計(jì)為 pip 和 pip-tools 的直接替代品,不使用緩存時(shí)比它們快 8-10 倍。也可通過(guò) uv venv 用作虛擬環(huán)境管理器,比 python -m venv 快 80 倍,比virtualenv 快 7 倍。
解析和安裝Trio庫(kù)的性能對(duì)比
2、Rye:愿景延續(xù)[4]
Rye 是 Flask 作者在去年 4 月發(fā)布的 Python 打包和項(xiàng)目管理工具,作者在文章中總結(jié)了它已實(shí)現(xiàn)的功能(下載 Python、管理虛擬環(huán)境、構(gòu)建和發(fā)布包、linting 和格式化、依賴管理等) ,介紹了自己的設(shè)計(jì)想法。(附1:作者的 16 分鐘教程視頻 Rye: a Hassle-Free Python Experience[5])(附2:上一則分享的 uv 團(tuán)隊(duì)已接管了 Rye,將來(lái)會(huì)融合成一個(gè)。Rye Grows With UV[6])
3、為什么越來(lái)越多用 Rust 開(kāi)發(fā)的庫(kù)?[7]
Rust 正在逐步取代 C 語(yǔ)言成為 Python 的高性能后端支撐。文章介紹了 Rust 相比 C 的優(yōu)勢(shì)所在,介紹了用 Rust 開(kāi)發(fā)的一些知名的 Python 庫(kù)。
4、80 行 Python 實(shí)現(xiàn)一個(gè)搜索引擎[8]
這篇文章略微標(biāo)題黨了,但是文章介紹的內(nèi)容很完整:基于 RSS 的異步爬蟲(chóng)、倒排索引、搜索排名、基于 FastAPI 的 Web 網(wǎng)頁(yè)。可以學(xué)習(xí)搜索引擎的工作原理,學(xué)習(xí)從數(shù)據(jù)獲取、數(shù)據(jù)解析、開(kāi)放接口、到網(wǎng)頁(yè)呈現(xiàn)的項(xiàng)目開(kāi)發(fā)流程。
5、如何計(jì)算 Python 中的 CPU 指令數(shù)?[9]
你知道執(zhí)行 Python 的 print("Hello") 大約需要多少個(gè) CPU 指令么?答案是 17000。導(dǎo)入 seaborn 則需要大約 20 億個(gè)。作者開(kāi)發(fā)了 Cirron[10] 庫(kù)以計(jì)算 CPU 指令數(shù)、分支未命中數(shù)及代碼的時(shí)間損耗等指標(biāo)。
6、Python 復(fù)用裝飾器代碼[11]
有多個(gè)裝飾器要加在不同的函數(shù)上,而且相同的裝飾器可能有不同傳參,如何復(fù)用這些裝飾器?問(wèn)題初看可能不好理解,文章中有直觀示例和解決過(guò)程,可以加深你對(duì)裝飾器的理解和掌握高階運(yùn)用。
7、像專業(yè)人士一樣處理 Asyncio 任務(wù)[12]
如何理解 Asyncio 中的 Task 對(duì)象?Asyncio 協(xié)程的工作原理是什么?如何等待一個(gè)任務(wù),又如何等待多個(gè)或一組任務(wù)?文章介紹了 Asyncio 的工作原理以及任務(wù)處理相關(guān)的函數(shù)用法。
8、使用 textwrap 模塊操作字符串[13]
文章介紹了 textwrap 庫(kù)的幾個(gè)主要功能,例如 shorten() 裁剪字符串長(zhǎng)度、wrap() 將字符串等寬分割、dedent() 處理字符串縮進(jìn)等。
9、總結(jié) Python 版本間的主要變更點(diǎn)[14]
Python 的一些新特性是在什么版本引入的?作者為了方便,梳理了一些重要語(yǔ)法和標(biāo)準(zhǔn)庫(kù)的變更記錄,同時(shí)也指出了每個(gè)版本終止維護(hù)的時(shí)間(例如 Python 3.8 將在今年 10 月 EOL)。(附:這個(gè)網(wǎng)站[15]可以查看 Python 及很多項(xiàng)目的 EOL 時(shí)間)
10、將 Postgres 作為隊(duì)列使用[16]
直接將數(shù)據(jù)庫(kù)作為隊(duì)列使用,性能會(huì)不會(huì)很受影響?作者測(cè)試的結(jié)果是影響很小。具體該如何實(shí)現(xiàn)將 Postgres 作為隊(duì)列使用?如何處理鎖和事務(wù)、任務(wù)重試、處理任務(wù)超時(shí)等問(wèn)題?
11、我在所有 Django 項(xiàng)目中都用的 20 個(gè)包[17]
Django 框架適用于構(gòu)建復(fù)雜的 Web 項(xiàng)目,作者介紹了自己常用的 20 軟件包,在 Django 自身的核心功能之外,提供了更豐富的功能。
12、Python 元類的真實(shí)案例[18]
Python 中的元類是什么?為什么要學(xué)習(xí)元類?這個(gè)高級(jí)特性并不常用,但值得學(xué)習(xí)了解。文章介紹了元類的工作原理,并用現(xiàn)實(shí)例子演示它的強(qiáng)大用途。
13、一萬(wàn)億行氣象數(shù)據(jù)的編程挑戰(zhàn)[19]
一個(gè)編程挑戰(zhàn)項(xiàng)目:有 100,000 個(gè)文件,每個(gè)文件 1000 萬(wàn)行,計(jì)算每個(gè)氣象站的最低、平均和最高溫度。數(shù)據(jù)存儲(chǔ)在 S3 上,總大小 2.5 TB。作者給出了自己的實(shí)現(xiàn)(運(yùn)行 8.5 分鐘),以及優(yōu)化成本的方案。
??Python潮流周刊??每 30 期為一季,第一季的精華內(nèi)容已整理成一篇,方便你隨時(shí)查看。在線訪問(wèn)地址:Python 潮流周刊第一季精華合集(1~30)[20]
???項(xiàng)目&資源
1、uv:性能極快的 Python 包安裝和解析器[21]
用 Rust 開(kāi)發(fā)的速度極快的 Python 包安裝器和解析器。Ruff 團(tuán)隊(duì)作品。可直接替換 pip 、 pip-tools 和 virtualenv 常用命令。(star 6.6K)
2、sqlite-web:基于 Web 的 SQLite 數(shù)據(jù)庫(kù)工具[22]
基于 Flask 開(kāi)發(fā)的 Web 端 SQLite 管理工具,可視化管理數(shù)據(jù)庫(kù)、數(shù)據(jù)表、數(shù)據(jù)項(xiàng)和索引等,支持 JSON 和 CSV 格式文件的導(dǎo)入導(dǎo)出。(star 2.6K)
3、celery-exporter:導(dǎo)出 Celery 指標(biāo)用于 Prometheus[23]
實(shí)時(shí)獲取 Celery 的任務(wù)狀態(tài)、工作線程、活動(dòng)任務(wù)數(shù)等監(jiān)控指標(biāo),遵循 Prometheus 導(dǎo)出器最佳實(shí)踐,并利用 Celery-mixin 提供了 Grafana 儀表板及 Prometheus 告警功能。
4、pyupgrade:自動(dòng)升級(jí) Python 較新版本的語(yǔ)法 [24]
一個(gè)強(qiáng)力的工具和 pre-commit 鉤子,可以自動(dòng)刪除冗余寫法、用新語(yǔ)法重寫過(guò)時(shí)的代碼、用更優(yōu)雅的寫法重構(gòu)代碼,等等。項(xiàng)目文檔中給出了很多例子,推薦閱讀。(star 3.2K)
# 兩個(gè)重寫成字典推導(dǎo)式的示例
-dict((a, b) for a, b in y)
+{a: b for a, b in y}
-dict([(a, b) for a, b in y])
+{a: b for a, b in y}
5、ollama-python:Ollama Python 庫(kù)[25]
支持 Python 3.8+,簡(jiǎn)單快速集成 Llama 2、Code Llama、mistral、gemma 等大語(yǔ)言模型,可自定義客戶端,還可創(chuàng)建異步客戶端。
6、web2pdf:將網(wǎng)頁(yè)轉(zhuǎn)換為 PDF 的 CLI[26]
一個(gè)命令行工具,可將網(wǎng)頁(yè)轉(zhuǎn)換為格式精美的 pdf。支持批量轉(zhuǎn)換、自定義樣式、附加 CSS、復(fù)雜布局、頁(yè)碼、目錄和分頁(yè)符等功能。
7、natural-sql:文本生成 SQL 的大語(yǔ)言模型[27]
NaturalSQL-7B 是擁有超高準(zhǔn)確性的文本生成 SQL 大模型,在 SQL-Eval 基準(zhǔn)測(cè)試中領(lǐng)先 GPT-3.5-turbo 和 claude-2,也領(lǐng)先于同數(shù)據(jù)規(guī)模的 sqlcoder-7b。
8、rawdog:在 CLI 中自動(dòng)生成并執(zhí)行 Python 腳本[28]
Rawdog(具有確定性輸出生成的遞歸增強(qiáng))是 RAG(檢索增強(qiáng)生成)的一種新穎替代方案,可以自己運(yùn)行腳本并獲取輸出作為上下文,然后再次調(diào)用自己。演示視頻的例子很驚艷。(star 1.6K)
9、UFO:基于 UI 與 Windows 系統(tǒng)交互的 AI 代理[29]
微軟新推出的 AI 代理框架,可無(wú)縫跨多應(yīng)用操作,完成用戶的復(fù)雜任務(wù)。使用 GPT-Vision 的多模態(tài)功能來(lái)理解應(yīng)用 UI,使用 Windows UI 自動(dòng)化控件交互。(star 1.9K)
基于不同素材自動(dòng)編寫并發(fā)送郵件
10、toolong:查看、跟蹤、合并和搜索日志文件(以及 JSONL)的終端應(yīng)用[30]
在命令行終端快速查看日志文件,支持實(shí)時(shí)尾隨、語(yǔ)法高亮、快捷搜索、自動(dòng)檢測(cè)時(shí)間戳合并日志等功能,支持 JSONL 文件,可自動(dòng)打開(kāi) .bz 和 .bz2 文件。(star 2K)
11、Owl:在本地運(yùn)行的個(gè)人可穿戴 AI[31]
在可穿戴設(shè)備上搭載 AI,傾聽(tīng)和觀察你生活中發(fā)生的一切。支持 ESP 平臺(tái)、Sony Spresense 或 Apple Watch 等硬件,支持本地和在線模型,多模態(tài)采集,說(shuō)話人驗(yàn)證等。
12、hyperdiv:用 Python 構(gòu)建響應(yīng)式 Web UI[32]
一個(gè)用 Python 快速開(kāi)發(fā)響應(yīng)式 UI 應(yīng)用的框架,具有內(nèi)置組件、簡(jiǎn)潔的即時(shí)模式語(yǔ)法和少量的工具樣板。支持 Shoelace 組件,支持 Markdown,集成 Chart.js 圖表,支持讀寫瀏覽器緩存,支持表單驗(yàn)證等。
13、fabric:使用 AI 增強(qiáng)人類[33]
這個(gè)項(xiàng)目旨在使每個(gè)人能將 AI 用于解決日常問(wèn)題。它的方法是將問(wèn)題拆解成很多獨(dú)立組件,使用結(jié)構(gòu)化的清晰提示讓 AI 完成任務(wù)。(star 5.6K)
??播客&視頻
1、Meta 喜歡 Python[34]
Meta 官方的一期播客節(jié)目,討論了開(kāi)發(fā)團(tuán)隊(duì)對(duì)最新 Python 版本的貢獻(xiàn),包括允許自定義 JIT(如 Cinder)的新鉤子、永生對(duì)象、對(duì)類型系統(tǒng)的改進(jìn)、更快的推導(dǎo)式等等。Meta 對(duì) Python 社區(qū)的貢獻(xiàn)確實(shí)很足哦~(附:谷歌、微軟、Meta?誰(shuí)才是 Python 最大的金主?[35])
2、Talk Python To Me #449:使用 FastUI 構(gòu)建 UI[36]
FastUI 是一個(gè) Web 界面開(kāi)發(fā)框架,可使用 React 構(gòu)建響應(yīng)式 Web 應(yīng)用,而無(wú)需編寫任何 JavaScript 或接觸 npm。這期播客的嘉賓是該框架的作者。
??歡迎訂閱
- 微信公眾號(hào)[37]:除更新周刊外,還發(fā)布其它原創(chuàng)作品,并轉(zhuǎn)載一些優(yōu)質(zhì)文章。(可加好友,可加讀者交流群)
- 博客[38] 及 RSS[39]:我的獨(dú)立博客,上面有歷年原創(chuàng)/翻譯的技術(shù)文章,以及從 2009 年以來(lái)的一些隨筆。
- 郵件[40] 及 RSS[41]:在 Substack 上開(kāi)通的頻道,滿足你通過(guò)郵件閱讀時(shí)事通訊的訴求。
- Github[42]:你可以獲取本周刊的 Markdown 源文件,做任何想做的事!
- Telegram[43]:除了發(fā)布周刊的通知外,我將它視為一個(gè)“副刊”,補(bǔ)充發(fā)布更加豐富的資訊。
- Twitter[44]:我的關(guān)注列表里有大量 Python 相關(guān)的開(kāi)發(fā)者與組織的賬號(hào)。
投稿: https://github.com/chinesehuazhou/python-weekly
[2]電報(bào)頻道: https://t.me/pythontrendingweekly
[3]uv:Rust 開(kāi)發(fā)的 Python 打包工具: https://astral.sh/blog/uv
[4]Rye:愿景延續(xù): https://lucumr.pocoo.org/2024/2/4/rye-a-vision/
[5]Rye: a Hassle-Free Python Experience: https://www.youtube.com/watch?v=q99TYA7LnuA
[6]Rye Grows With UV: https://lucumr.pocoo.org/2024/2/15/rye-grows-with-uv/
[7]為什么越來(lái)越多用 Rust 開(kāi)發(fā)的庫(kù)?: https://baincapitalventures.com/insight/why-more-python-developers-are-using-rust-for-building-libraries/
[8]80 行 Python 實(shí)現(xiàn)一個(gè)搜索引擎: https://www.alexmolas.com/2024/02/05/a-search-engine-in-80-lines.html
[9]如何計(jì)算 Python 中的 CPU 指令數(shù)?: https://blog.mattstuchlik.com/2024/02/08/counting-cpu-instructions-in-python.html
[10]Cirron: https://github.com/s7nfo/Cirron
[11]Python 復(fù)用裝飾器代碼: https://www.kawabangga.com/posts/5757
[12]像專業(yè)人士一樣處理 Asyncio 任務(wù): https://jacobpadilla.com/articles/handling-asyncio-tasks
[13]使用 textwrap 模塊操作字符串: https://martinheinz.dev/blog/108
[14]總結(jié) Python 版本間的主要變更點(diǎn): https://www.nicholashairs.com/posts/major-changes-between-python-versions/
[15]網(wǎng)站: https://endoflife.date/python
[16]將 Postgres 作為隊(duì)列使用: https://leontrolski.github.io/postgres-as-queue.html
[17]我在所有 Django 項(xiàng)目中都用的 20 個(gè)包: https://learndjango.com/tutorials/20-django-packages-i-use-every-project
[18]Python 元類的真實(shí)案例: https://dev.to/anbagu/real-case-of-python-metaclass-application-2pj8
[19]一萬(wàn)億行氣象數(shù)據(jù)的編程挑戰(zhàn): https://blog.coiled.io/blog/1trc.html
[20]Python 潮流周刊第一季精華合集(1~30): https://pythoncat.top/posts/2023-12-11-weekly
[21]uv:性能極快的 Python 包安裝和解析器: https://github.com/astral-sh/uv
[22]sqlite-web:基于 Web 的 SQLite 數(shù)據(jù)庫(kù)工具: https://github.com/coleifer/sqlite-web
[23]celery-exporter:導(dǎo)出 Celery 指標(biāo)用于 Prometheus: https://github.com/danihodovic/celery-exporter
[24]pyupgrade:自動(dòng)升級(jí) Python 較新版本的語(yǔ)法 : https://github.com/asottile/pyupgrade
[25]ollama-python:Ollama Python 庫(kù): https://github.com/ollama/ollama-python
[26]web2pdf:將網(wǎng)頁(yè)轉(zhuǎn)換為 PDF 的 CLI: https://github.com/dvcoolarun/web2pdf
[27]natural-sql:文本生成 SQL 的大語(yǔ)言模型: https://github.com/cfahlgren1/natural-sql
[28]rawdog:在 CLI 中自動(dòng)生成并執(zhí)行 Python 腳本: https://github.com/AbanteAI/rawdog
[29]UFO:基于 UI 與 Windows 系統(tǒng)交互的 AI 代理: https://github.com/microsoft/UFO
[30]toolong:查看、跟蹤、合并和搜索日志文件(以及 JSONL)的終端應(yīng)用: https://github.com/Textualize/toolong
[31]Owl:在本地運(yùn)行的個(gè)人可穿戴 AI: https://github.com/OwlAIProject/Owl
[32]hyperdiv:用 Python 構(gòu)建響應(yīng)式 Web UI: https://github.com/hyperdiv/hyperdiv
[33]fabric:使用 AI 增強(qiáng)人類: https://github.com/danielmiessler/fabric
[34]Meta 喜歡 Python: https://engineering.fb.com/2024/02/12/developer-tools/meta-loves-python/
[35]谷歌、微軟、Meta?誰(shuí)才是 Python 最大的金主?: https://pythoncat.top/posts/2022-11-21-sponsors
[36]Talk Python To Me #449:使用 FastUI 構(gòu)建 UI: https://talkpython.fm/episodes/show/449/building-uis-in-python-with-fastui
[37]微信公眾號(hào): https://qinglite-1253448069.cos.ap-shanghai.myqcloud.com/web/e60bd68bc8457412c2aa53620ba674452ec756f7
[38]博客: https://pythoncat.top
[39]RSS: https://pythoncat.top/rss.xml
[40]郵件: https://pythoncat.substack.com
[41]RSS: https://pythoncat.substack.com/feed
[42]Github: https://github.com/chinesehuazhou/python-weekly
[43]Telegram: https://t.me/pythontrendingweekly
[44]Twitter: https://twitter.com/chinesehuazhou
如果你覺(jué)得本文有幫助 請(qǐng)慷慨 分享 和 點(diǎn)贊 ,感謝啦 !
