Python后端項目之:我為什么使用pdm+uv

在試用了一段時間的uv和pdm之后,上個月(2025.06)開始,逐步把用了幾年的poetry替換成了pdm+uv(pipx install pdm uv && pdm config use_uv true)

## 為什么poetry -> pdm:

1. 通過ssh連接到服務器并使用poetry shell激活虛擬環境之后,如果沒有主動退出,那么該進程有可能一直在跑著,即使你已經斷開了服務連接,有時候這個進程甚至會占用100%的CPU

2. poetry需要額外安裝poetry-plugin-version插件才能支持dynamic version,而pdm自身就支持

3. poetry需要加插件才能支持換國內的鏡像源,而pdm直接用自帶的config命令就行

4. poetry居然沒有官方的github action構件,寫ci時還得手動pip install poetry

5. poetry最大的痛點是lock賊慢,依賴比較多的項目,到最后懶得更新lock文件了,直接手動更新pyproject.toml并通過pip來安裝和升級依賴

## 為什么時pdm+uv,而不是只用uv:

1. 在國外一般使用清華阿里等pypi鏡像源,uv的lock文件里會攜帶源信息,這就導致即使服務器環境和本地環境執行uv lock會產生不同的結果

2. uv的優勢是快,但pdm在啟動use_uv之后,速度已經相差不大

3. pdm在工程化支持這一塊做的相對較好,例如pdm new my-project可以直接創建新項目,而uv目前(uv 0.7.20)并不支持,再者pdm是python開發的,寫插件很方便,如:pdm self add pdm-plugin-i

結論:江山代有人才出,長江后浪推前浪。用了好幾年的poetry,雖然各種槽點,但確實比pip+requirements.txt好一些。node前端的包管理工具,除了npm就是yarn和pnpm,而Python后端卻是conda、pipenv、poetry、flit、hatch、uv、pdm、setuptools-scm、Rye讓人眼花繚亂。其中uv作為后起之秀,在安裝和解析包的速度這一塊真的是一騎絕塵,而pdm在支持PEP新特性這一塊相當給力。期待pdm+uv能夠一統江湖,結束紛爭亂象。

附:pdm項目開發環境自定義命令實例

[build-system]
requires = ["pdm-backend"]
build-backend = "pdm.backend"[dependency-groups]
dev = ["fast-dev-cli>=0.16.2,<1"][tool.pdm.scripts]
up = 'pdm update -G :all'
type = "pdm run mypy ."
tree = 'pdm list --tree'
deps = 'pdm sync -G :all {args}'
prod = 'pdm install --prod --frozen'
fresh = {composite = ["up", "deps"]}
test = 'pdm run fast test'
style = {composite = ["ruff format", "ruff check --fix {args}"]}
check = 'pdm run fast check {args}'
lint = 'pdm run fast lint {args}'
bump = "pdm run fast bump patch --commit {args}"
tag = "pdm run fast tag {args}"
start = {composite = ["pre-commit install", "deps"]}
ci = {composite = ["deps", "check", "test"]}

PDM Scripts - PDM

不想要uv和pdm lock的話,還可以用回pip:

pdm run python -m ensurepip
pdm run python -m pip install --upgrade pip
pdm run python -m pip install --group dev -e .
pdm add <prod-dep> --no-lock # 只安裝包和更新pyproject.toml,不更新pdm.lock

另外pdm/uv換源可以這樣:

pipx install pip-conf-mirror
pip-conf --pdm qinghua # 給pdm換清華源
pip-conf --uv ali # 給uv換阿里源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88976.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88976.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88976.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙Next開發,配置Navigation的Route

1. 通過router_map.json配置文件進行 創建頁面配置router_map.json {"routerMap": [{"name": "StateExamplePage","pageSourceFile": "src/main/ets/pages/state/StateExamplePage.ets","buildFunction": "P…

在 GitHub 上創建私有倉庫

一、在 GitHub 上創建私有倉庫打開 GitHub官網 并登錄。點擊右上角的 “” → 選擇 “New repository”。填寫以下內容&#xff1a; Repository name&#xff1a;倉庫名稱&#xff0c;例如 my-private-repo。Description&#xff1a;可選&#xff0c;倉庫描述。Visibility&…

量產技巧之RK3588 Android12默認移除導航欄狀態欄?

本文介紹使用源碼編譯默認去掉導航欄/狀態欄方法,以觸覺智能EVB3588開發板演示&#xff0c;Android12系統&#xff0c;搭載了瑞芯微RK3588芯片&#xff0c;該開發板是核心板加底板設計&#xff0c;音視頻接口、通信接口等各類接口一應俱全&#xff0c;可幫助企業提高產品開發效…

Conda 安裝與配置詳解及常見問題解決

《Conda 安裝與配置詳解及常見問題解決》 安裝 Conda 有兩種主流方式&#xff0c;分別是安裝 Miniconda&#xff08;輕量級&#xff09;和 Anaconda&#xff08;包含常用數據科學包&#xff09;。下面為你詳細介紹安裝步驟和注意要點。 一、安裝 Miniconda&#xff08;推薦&a…

Linux ——lastb定時備份清理

lastb 命令顯示的是系統中 /var/log/btmp 文件中的SSH 登錄失敗記錄。你可以像處理 wtmp 那樣&#xff0c;對 btmp 文件進行備份與清理。? 一、備份 lastb 數據cp /var/log/btmp /var/log/btmp.backup.$(date %F)會保存為如 /var/log/btmp.backup.2025-07-14? 二、清空 lastb…

自定義類型 - 聯合體與枚舉(百度筆試題算法優化)

目錄一、聯合體1.1 聯合體類型的聲明1.2 聯合體的特點1.3 相同成員的結構體和聯合體對比1.4 聯合體大小的計算1.5 聯合練習二、枚舉類型2.1 枚舉類型的聲明2.2 枚舉類型的優點總結一、聯合體 1.1 聯合體類型的聲明 像結構體一樣&#xff0c;聯合體也是由一個或者多個成員構成…

FS820R08A6P2LB——英飛凌高性能IGBT模塊,驅動高效能源未來!

產品概述FS820R08A6P2LB 是英飛凌&#xff08;Infineon&#xff09;推出的一款高性能、高可靠性IGBT功率模塊&#xff0c;采用先進的EconoDUAL? 3封裝&#xff0c;專為大功率工業應用設計。該模塊集成了IGBT&#xff08;絕緣柵雙極型晶體管&#xff09;和二極管&#xff0c;適…

python學智能算法(十八)|SVM基礎概念-向量點積

引言 前序學習進程中&#xff0c;已經對向量的基礎定義有所了解&#xff0c;已經知曉了向量的值和方向向量的定義&#xff0c;學習鏈接如下&#xff1a; 向量的值和方向 在此基礎上&#xff0c;本文進一步學習向量點積。 向量點積 向量點積運算規則&#xff0c;我們在中學階…

【windows辦公小助手】比文檔編輯器更好用的Notepad++輕量編輯器

Notepad 中文版軟件下載&#xff1a;這個路徑總是顯示有百度無法下載&#xff0c;不推薦 更新&#xff1a;推薦下載路徑 https://github.com/notepad-plus-plus/notepad-plus-plus/releases 參考博主&#xff1a;Notepad的安裝與使用

2025年7月12日全國青少年信息素養大賽圖形化(Scratch)編程小學高年級組復賽真題+答案解析

2025年7月12日全國青少年信息素養大賽圖形化(Scratch)編程小學高年級組復賽真題+答案解析 選擇題 題目一 運行如圖所示的程序,舞臺上一共會出現多少只小貓呢?( ) A. 5 B. 6 C. 7 D. 8 正確答案: B 答案解析: 程序中“當綠旗被點擊”后,角色先移到指定位置,然后“重…

對于獨熱編碼余弦相似度結果為0和詞向量解決了詞之間相似性問題的理解

文章目錄深入理解簡單案例結論詞向量&#xff08;Word Embedding&#xff09;簡介詞向量如何解決相似性問題&#xff1f;簡單案例&#xff1a;基于上下文的詞向量訓練總結對于獨熱表示的向量&#xff0c;如果采用余弦相似度計算向量間的相似度&#xff0c;可以明顯的發現任意兩…

數據結構·數狀數組(BIT)

樹狀數組(Binary Index Tree) 英文名&#xff1a;使用二進制下標的樹結構 理解&#xff1a;這個樹實際上用數組來存&#xff0c;二進制下標就是將正常的下標拆為二進制來看。 求x的最低位1的函數lowbit&#xff08;x&#xff09; 假設x的二進制表示為x ...10000&#xff0c;…

uniapp video視頻全屏播放后退出,頁面字體變大,樣式混亂問題

uniapp官方的說法是因為頁面使用rpx&#xff0c;但是全屏和退出全屏自動計算屏幕尺寸不支持rpx&#xff0c;建議使用px。但是因為uniapp端的開發都是使用rpx作為屏幕尺寸計算參數&#xff0c;不可能因為video全屏播放功能就整個全部修改&#xff0c;工作量大&#xff0c;耗時耗…

重復頻率較高的廣告為何一直在被使用?

在日常生活中&#xff0c;重復評率較高的洗腦廣告我們時常能夠碰到。廣告的本質是信息傳遞&#xff0c;而重復頻率較高的廣告往往可以通過洗腦式的傳播方式來提升傳播效率。下面就讓我們一同來了解下&#xff0c;為何這類廣告一直受到企業的青睞。一、語義凝練高頻率廣告的內容…

內容管理系統指南:企業內容運營的核心引擎

內容管理看似簡單&#xff0c;實際上隨著內容量的激增&#xff0c;管理難度也逐步提升。尤其是在面對大量頁面、圖文、視頻資料等數字內容時&#xff0c;沒有專業工具的支持&#xff0c;效率與準確性都會受到挑戰。此時&#xff0c;內容管理系統&#xff08;CMS&#xff09;應運…

文獻查找任務及其方法

1. 必備網站&#xff1a; 谷歌學術 Web of Science Engineering Village CNKI翻譯助手 科研通 2. 任務 學術上的一個調研&#xff0c;自動駕駛 3d 目標檢測 方向的近7年的方法&#xff0c;模態&#xff08;相機/雷達/相機雷達 等&#xff09;&#xff0c;及其使用的數據集&a…

鴻蒙的NDK開發初級入門篇

初級必備的知識&#xff1a; NDK開發在什么時候用&#xff1f; 答&#xff1a;&#xff1a;NDK 開發在幫助應用提升性能的情況下使用&#xff0c;比如游戲開發&#xff0c;和硬件交互的場景中。 還有一個公司已經有標準的C或C庫&#xff0c;不想在開發ArkTS的代碼前提下。 開發…

Unity發布Windows平臺后通過Advanced Installer制作安裝包

Unity發布Windows平臺后是一堆庫資源&#xff0c;以及一個可執行的exe文件&#xff0c;并不是一個安裝包&#xff0c;如果需要制作成安裝包&#xff0c;需要再進一步打包&#xff0c;本篇文章介紹一個Advanced Installer的軟件&#xff0c;專門用來制作Windows平臺的安裝包的。…

代數基本定理

代數基本定理 多項式 f(z)anznan?1zn?1?a1za0f(z) a_n z^n a_{n-1} z^{n-1} \cdots a_1 z a_0f(z)an?znan?1?zn?1?a1?za0?&#xff08;其中 n>1n > 1n>1 且 an,a0≠0a_n,a_0 \neq 0an?,a0?0&#xff09;在復數域內有根。 約定 以 ttt 為參數的閉曲…

springboot快速集成對接本地Ollama里的Deepseek-R1

書接上回&#xff0c;我們在本地安裝了一個Ollama&#xff0c;然后下載了一個deepseek-r1:7b&#xff0c;傳送門 本次目標&#xff1a;使用springboot對接ollama&#xff0c;完成簡單api對接 1.創建一個項目&#xff0c;選擇JDK17&#xff0c;Spring Boot版本3.5.3&#xff0c…