您當前的位置:首頁 > 遊戲

劃時代的 Python 包管理器 — PDM 快取機制

作者:由 王炳明 發表于 遊戲時間:2022-04-13

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 所配置的目錄

劃時代的 Python 包管理器 — PDM 快取機制

然後進入 pdm-demo2 下,同樣安裝 typer 包

pdm add typer

同樣進入 python 互動式直譯器,試著匯入一下,檢視匯入的 typer 包路徑是什麼?

可以發現,匯入的 typer 與之前 pdm-demo1 的路徑一致,說明這兩個專案用的同一個 typer 包,避免了同個包同個版本的重複安裝。

劃時代的 Python 包管理器 — PDM 快取機制

3。 快取的原理

關於快取原理,其實並不難,對於不同的 install。cache_method 原理也不一樣

cache_method=symlink

symlink 是預設的連線方式,也是最好理解的一種方式。

當你安裝了 typer 包後,在本地包目錄下就可以看到 typer 透過一個軟連結的方式指向了快取目錄下的 typer 包

劃時代的 Python 包管理器 — PDM 快取機制

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 目錄

劃時代的 Python 包管理器 — PDM 快取機制

4。 快取的管理

pdm 管理快取的命令幫助如下

劃時代的 Python 包管理器 — 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 包管理器 — PDM 快取機制

Python 黑魔法指南

《Python黑魔法指南》目前迎來了 v3。0 的版本,囊集了 100 多個開發小技巧,非常適合在閒時進行碎片閱讀。

線上體驗地址:

https://

magic。iswbm。com

劃時代的 Python 包管理器 — PDM 快取機制

Python 中文指南

學 Python 最好的學習資料永遠是 Python 官方文件,可惜現在的官方文件大都是英文,雖然有中文的翻譯版了,但是進度實在堪憂。為了照顧英文不好的同學,我自己寫了一份 面向零基礎的朋友 的線上 Python 文件 —— 《Python中文指南》

線上體驗地址:

https://

python。iswbm。com

劃時代的 Python 包管理器 — PDM 快取機制

有幫助的話,記得幫我

@王炳明

點個贊喲~

標簽: PDM  Python  快取  cache  PTH