El administrador de paquetes de Python que hace época: mecanismo de almacenamiento en caché de PDM

Catálogo de la serie PDM

1. El administrador de paquetes de Python que hizo época: tutorial de PDM: introducción
2. El administrador de paquetes de Python que hizo época: tutorial de PDM: el principio
3. El administrador de paquetes de Python que hizo época: configuración local y global de PDM
4. El administrador de paquetes de Python que hizo época: configuración local y global de PDM Administrador de paquetes de Python: proyecto local y global de PDM
5. El administrador de paquetes de Python que hace época: mecanismo de almacenamiento en caché de PDM
6. El lector preguntó: ¿Cómo hacer que PyCharm sea compatible con PDM?


pdm presentó el directorio de paquetes local de pep 582, y muchas personas se preguntan: cada proyecto está en su propio directorio de proyectos, ¿cuál es la diferencia entre eso y el entorno virtual venv?

Mucha gente no tiene un conocimiento profundo del entorno virtual y pep 582, por lo que es normal tener esta pregunta.

En primer lugar, la primera diferencia es que el entorno virtual tiene su propio intérprete de Python, mientras que pep 582 no agrega un nuevo intérprete de Python, por lo que pep 582 es más liviano.

Luego, la segunda diferencia es nuestro contenido central hoy, el soporte del mecanismo de almacenamiento en caché pdm.

Si varios proyectos de pdm dependen del mismo paquete de python de la misma versión, en circunstancias normales, cada proyecto guardará una copia en su propio __pypackages__directorio .

Pero hay varios problemas con esto:

  1. desperdicio de espacio en disco
  2. La instalación es lenta

Puede pensar que los discos son el hardware más barato ahora, y no importa si lo desperdicia, pero algunos proyectos de Python tienen más paquetes dependientes de los que puede imaginar. Por ejemplo, OpenStack, el proyecto de Python más grande del mundo, tiene miles de paquetes dependientes. paquetes Incluso si no se siente mal por su disco, su tiempo debe ser valioso, ¿verdad?

Si crea un nuevo proyecto de pdm y tiene que reinstalar tantos paquetes dependientes que no puede hacerlo en un día, entonces sabrá la importancia del almacenamiento en caché.

1. Habilitar caché

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 相信有不少人不清楚它的用法和原理,这里简单提一下。

Cuando Python atraviesa el directorio de archivos de la biblioteca conocida, si encuentra un archivo .pth, agregará la ruta registrada en el archivo a la configuración sys.path, por lo que la biblioteca especificada en el archivo .pth también puede ser utilizada por Python Runtime encontrado.

Concéntrese nuevamente en pdm, si usa el modo cache_method=pth, cada vez que instale un paquete, se generará un .ptharchivo , que registra el directorio lib del paquete que se almacenará en caché.

De esta manera, cuando Python busque paquetes en el __pypackages__directorio , una vez que encuentre un .ptharchivo, agregará la ruta registrada en el .ptharchivo a sys.path.

En el ejemplo anterior, mirando el __pypackages__directorio , puede encontrar que hay muchos archivos aaa_xxx.pth, y el contenido de estos archivos es el directorio lib del paquete correspondiente en nuestro directorio de caché

4. Gestión de caché

La ayuda del comando para la caché de administración de pdm es la siguiente

  • pdm cache clear: borrar todos los cachés
  • información de caché de pdm: ver toda la información de caché
  • pdm remove [patrón]: elimina el archivo coincidente
  • lista de caché de pdm: enumera todos los archivos de rueda en el caché

Supongo que te gusta

Origin juejin.im/post/7086101465206358053
Recomendado
Clasificación