劃時代的 Python 包管理器 — PDM 快取機制
PDM 系列目錄
1、劃時代的 Python 包管理器:PDM 教程 — 入門篇
2、劃時代的 Python 包管理器:PDM 教程 — 原理篇
3、劃時代的 Python 包管理器 — PDM 區域性&全域性配置
4、劃時代的 Python 包管理器 — PDM 區域性&全域性專案
5、劃時代的 Python 包管理器 — PDM 快取機制
6、讀者問:如何讓 PyCharm 支援 PDM ?
pdm 引入了 pep 582 的本地包目錄,有很多人在質疑:每個專案都在自己專案目錄之下,那和 venv 虛擬環境有什麼區別?
不少人對於虛擬環境及 pep 582 的理解不深,有這個疑問也是正常的。
首先,第一點不同,虛擬環境有自己的 Python 直譯器,而 pep 582 並沒有新增 Python 直譯器,因此 pep 582 更加輕量。
然後,第二點不同,就是我們今天的核心內容,pdm 快取機制的支援。
如果多個 pdm 專案,依賴相同版本的同一個 python 包,正常情況下,每個專案會自己存一份到自己的
__pypackages__
目錄下。
但這樣有幾個問題:
浪費磁碟空間
安裝速度慢
你或許會認為,現在磁碟是最便宜的硬體了,浪費一點無所謂,但有些 Python 專案的依賴包多到你無法想象,比如世界上最大的 Python 專案 OpenStack ,依賴包更是達到了上千個,就算你不心疼你的磁碟,那你的時間肯定很寶貴吧?
你建立一個新的 pdm 專案,要重頭安裝一遍這麼多依賴包,沒個一天時間也搞不定,到時你就知道快取的重要性了。
1。 開啟快取
pdm 預設是關閉 cache 的,如有需要,可以透過如下命令進行開啟
$ pdm config install。cache on
與快取相關的配置有三個
install。cache:是否開啟快取
install。cache_method:選擇連線快取的方式
cache_dir:指定快取的存放目錄
關於 cache_dir 如無特殊需要,可以不用管,用預設的目錄即可
/Users/iswbm/Library/Caches/pdm
比較難以理解的,值得一講的是 install。cache_method,它的值有兩種:
symlink:以軟連結的方式連
pth:以 pth 的方式連線
關於它們的區別,我在後邊有詳細的講解,請繼續往
2。 簡單示例
這邊以一個簡單的示例,讓你瞭解快取的工作原理。
首先我建立兩個 pdm 專案
# 初始化第一個 pdm 專案
mkdir pdm-demo1 && cd pdm-demo1
pdm init
# 初始化第二個 pdm 專案
mkdir pdm-demo2 && cd pdm-demo2
pdm init
在 pdm-demo1 下,安裝 typer 的包
pdm add typer
然後進入 python 互動式直譯器,試著匯入一下,檢視匯入的 typer 包路徑是什麼?
可以發現,存放的目錄正是 cache_dir 所配置的目錄
然後進入 pdm-demo2 下,同樣安裝 typer 包
pdm add typer
同樣進入 python 互動式直譯器,試著匯入一下,檢視匯入的 typer 包路徑是什麼?
可以發現,匯入的 typer 與之前 pdm-demo1 的路徑一致,說明這兩個專案用的同一個 typer 包,避免了同個包同個版本的重複安裝。
3。 快取的原理
關於快取原理,其實並不難,對於不同的 install。cache_method 原理也不一樣
cache_method=symlink
symlink 是預設的連線方式,也是最好理解的一種方式。
當你安裝了 typer 包後,在本地包目錄下就可以看到 typer 透過一個軟連結的方式指向了快取目錄下的 typer 包
cache_method=pth
對於
。pth
相信有不少人不清楚它的用法和原理,這裡簡單提一下。
當 Python 在遍歷已知的庫檔案目錄過程中,如果發現有 。pth 檔案,就會將檔案中所記錄的路徑加入到 sys。path 設定中,於是 。pth 檔案說指明的庫也就可以被 Python 執行環境找到了。
焦點回到 pdm 中來,如果你使用 cache_method=pth 的模式,你每安裝一個包,在你的本地包目錄下就會生成一個
。pth
檔案,裡面記錄要快取的包的 lib 目錄
這樣一來,當 Python 在
__pypackages__
目錄下查詢包時,一旦發現有
。pth
檔案,就會把
。pth
檔案中記錄的路徑加入 sys。path 中去。
在上面的例子中,檢視
__pypackages__
目錄,可以發現有許多 aaa_xxx。pth 的檔案,而這些檔案的內容,即是我們快取目錄下對應包的 lib 目錄
4。 快取的管理
pdm 管理快取的命令幫助如下
pdm cache clear:清理所有的快取
pdm cache info:檢視所有的快取信
pdm remove [pattern]:移除匹配到的檔案
pdm cache list:列出所有在快取中的 wheel 檔案
絮叨一下
我在知乎上寫過很多的 Python 相關文章,其中包括 Python 實用工具,Python 高效技巧,PyCharm 使用技巧,很高興得到了很多知乎朋友的認可和支援。在他們的鼓勵之下,我將過往文章分門別類整理成三本 PDF 電子書
PyCharm 中文指南
《PyCharm 中文指南》使用 300 多張 GIF 動態圖的形式,詳細講解了最貼合實際開發的 105個 PyCharm 高效使用技巧,內容通俗易懂,適合所有 Python 開發者。
線上體驗地址:
https://
pycharm。iswbm。com
Python 黑魔法指南
《Python黑魔法指南》目前迎來了 v3。0 的版本,囊集了 100 多個開發小技巧,非常適合在閒時進行碎片閱讀。
線上體驗地址:
https://
magic。iswbm。com
Python 中文指南
學 Python 最好的學習資料永遠是 Python 官方文件,可惜現在的官方文件大都是英文,雖然有中文的翻譯版了,但是進度實在堪憂。為了照顧英文不好的同學,我自己寫了一份 面向零基礎的朋友 的線上 Python 文件 —— 《Python中文指南》
線上體驗地址:
https://
python。iswbm。com
有幫助的話,記得幫我
@王炳明
點個贊喲~