Catálogo da Série PDM
1. O gerenciador de pacotes Python que fez época: tutorial PDM - introdutório
2. O gerenciador de pacotes Python que fez época: tutorial PDM - o princípio
3. O gerenciador de pacotes Python que fez época - configuração local e global do PDM
4. A criação de época Gerenciador de pacotes Python - projeto PDM local e global
5. O gerenciador de pacotes Python que marcou época - mecanismo de cache PDM
6. O leitor perguntou: Como fazer o PyCharm suportar PDM?
pdm introduziu o diretório de pacotes local do pep 582, e muitas pessoas estão questionando: cada projeto está em seu próprio diretório de projetos, qual é a diferença entre isso e o ambiente virtual venv?
Muitas pessoas não têm um conhecimento profundo de ambiente virtual e pep 582, então é normal ter essa dúvida.
Em primeiro lugar, a primeira diferença é que o ambiente virtual tem seu próprio interpretador Python, enquanto o pep 582 não adiciona um novo interpretador Python, então o pep 582 é mais leve.
Então, a segunda diferença é nosso conteúdo principal hoje, o suporte do mecanismo de cache pdm.
Se vários projetos pdm dependerem do mesmo pacote python da mesma versão, em circunstâncias normais, cada projeto salvará uma cópia em seu próprio __pypackages__
diretório .
Mas há vários problemas com isso:
- desperdício de espaço em disco
- A instalação é lenta
Você pode pensar que os discos são o hardware mais barato agora, e não importa se você os desperdiça, mas alguns projetos Python têm pacotes mais dependentes do que você pode imaginar. Por exemplo, OpenStack, o maior projeto Python do mundo, tem milhares de Mesmo que você não se sinta mal com seu disco, seu tempo deve ser precioso, certo?
Você cria um novo projeto pdm, e precisa reinstalar tantos pacotes dependentes, e não consegue fazer isso em um dia, então você saberá a importância do cache.
1. Ative o cache
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
相信有不少人不清楚它的用法和原理,这里简单提一下。
Quando o Python estiver percorrendo o diretório do arquivo de biblioteca conhecido, se encontrar um arquivo .pth, ele adicionará o caminho registrado no arquivo à configuração sys.path, para que a biblioteca especificada no arquivo .pth também possa ser usada pelo Python Runtime encontrado.
Concentre-se novamente no pdm, se você usar o modo cache_method=pth, toda vez que você instalar um pacote, um .pth
arquivo , que registra o diretório lib do pacote a ser armazenado em cache.
Dessa forma, quando o Python procura pacotes no __pypackages__
diretório , ao encontrar um .pth
arquivo, ele adicionará o caminho registrado no .pth
arquivo ao sys.path.
No exemplo acima, olhando para o __pypackages__
diretório , você pode descobrir que existem muitos arquivos aaa_xxx.pth, e o conteúdo desses arquivos é o diretório lib do pacote correspondente em nosso diretório de cache
4. Gerenciamento de cache
A ajuda do comando para o cache de gerenciamento do pdm é a seguinte
- pdm cache clear: limpa todos os caches
- pdm cache info: Veja todas as informações de cache
- pdm remove [padrão]: remove o arquivo correspondente
- pdm cache list: lista todos os arquivos wheel no cache