画期的なPythonパッケージマネージャー-PDMキャッシングメカニズム

PDMシリーズカタログ

1.画期的なPythonパッケージマネージャー:PDMチュートリアル-入門
2.画期的なPythonパッケージマネージャー:PDMチュートリアル-原則
3.画期的なPythonパッケージマネージャー-PDMローカルおよびグローバル構成
4.画期的なPythonパッケージマネージャーPythonパッケージマネージャー-PDMローカルおよびグローバルプロジェクト
5.画期的なPythonパッケージマネージャー-PDMキャッシングメカニズム
6.読者からの質問:PyCharmでPDMをサポートする方法は?


pdmはpep582のローカルパッケージディレクトリを導入しましたが、多くの人が疑問を持っています。各プロジェクトは独自のプロジェクトディレクトリの下にありますが、それとvenv仮想環境の違いは何ですか。

多くの人は仮想環境とpep582を深く理解していないので、この質問をするのは普通のことです。

まず、最初の違いは、仮想環境には独自のPythonインタープリターがありますが、pep 582は新しいPythonインタープリターを追加しないため、pep582の方が軽量です。

次に、2つ目の違いは、今日のコアコンテンツであるpdmキャッシングメカニズムのサポートです。

複数のpdmプロジェクトが同じバージョンの同じPythonパッケージに依存している場合、通常の状況では、各プロジェクトはコピーを独自の__pypackages__ディレクトリ。

しかし、これにはいくつかの問題があります。

  1. ディスクスペースの浪費
  2. インストールが遅い

ディスクは現在最も安価なハードウェアであり、無駄にしてもかまいませんが、一部のPythonプロジェクトには、想像以上に依存パッケージがあります。たとえば、世界最大のPythonプロジェクトであるOpenStackには、数千の依存パッケージがあります。パッケージ。ディスクについて悪く感じなくても、あなたの時間は貴重なものでなければなりませんよね?

新しいpdmプロジェクトを作成すると、非常に多くの依存パッケージを再インストールする必要があり、1日で完了できなくなります。そうすれば、キャッシュの重要性がわかります。

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モードを使用する場合、パッケージをインストールするたびに、キャッシュされるパッケージのlibディレクトリを記録する.pthファイル。

このように、Pythonは__pypackages__ディレクトリ、ファイルを見つけると、ファイル.pthに記録されているパスをsys.pathに追加します。.pth

上記の例では、__pypackages__ディレクトリ多くのaaa_xxx.pthファイルがあり、これらのファイルの内容は、キャッシュディレクトリ内の対応するパッケージのlibディレクトリであることがわかります。

4.キャッシュ管理

pdm管理キャッシュのコマンドヘルプは次のとおりです

  • pdm cache clear:すべてのキャッシュをクリアします
  • pdmキャッシュ情報:すべてのキャッシュ情報を表示
  • pdm remove [pattern]:一致したファイルを削除します
  • pdmキャッシュリスト:キャッシュ内のすべてのホイールファイルを一覧表示します

おすすめ

転載: juejin.im/post/7086101465206358053