node perl module cpan

node - ¿Cómo puedo desinstalar un módulo Perl instalado a través de `cpan`?



npm uninstall local package (6)

  1. Instale App::cpanminus desde CPAN (use: cpan App::cpanminus para esto).
  2. Escriba cpanm --uninstall Module::Name (observe la " m ") para desinstalar el módulo con cpanminus.

Esto debería funcionar.

Estoy usando Perl corriendo en el espacio de usuario (no instalado a través de root) e instalando módulos a través de la línea de comando cpan . Me gustaría saber si hay una manera simple de eliminar un módulo sin tener que trabajar mucho borrando archivos individuales.

Busqué esta pregunta en Internet y encontré algunas respuestas, pero las respuestas que he encontrado parecen discutir el uso del administrador de paquetes Perl (específico para Microsoft Windows), de lo contrario, el sistema operativo específico (BSDpan), sugiriendo usar cpanplus (que He tenido varias malas experiencias con), o terminé señalando un enlace inactivo de la siguiente manera: http://www.cpan.org/misc/cpan-faq.html#How_delete_Perl_modules .

Mi pregunta es específicamente si hay una forma clara de eliminar un módulo instalado a través de cpan .


Actualización 2013: Este código es obsoleto. En su lugar, votó share .

No necesito desinstalar módulos a menudo, pero el enfoque basado en el archivo .packlist nunca me ha fallado hasta ahora.

use 5.010; use ExtUtils::Installed qw(); use ExtUtils::Packlist qw(); die "Usage: $0 Module::Name Module::Name/n" unless @ARGV; for my $mod (@ARGV) { my $inst = ExtUtils::Installed->new; foreach my $item (sort($inst->files($mod))) { say "removing $item"; unlink $item or warn "could not remove $item: $!/n"; } my $packfile = $inst->packlist($mod)->packlist_file; print "removing $packfile/n"; unlink $packfile or warn "could not remove $packfile: $!/n"; }


Como regla general, no existe un mecanismo de ''desinstalación'' específico que viene con los módulos de CPAN. Pero puede intentar make uninstall en el directorio original en el que se descomprimió el módulo (esto es a menudo en /root/.cpan o ~/.cpan ), ya que algunos paquetes sí contienen esta directiva en su script de instalación. (Sin embargo, dado que ha instalado módulos en un directorio de biblioteca local (no raíz), también tiene la opción de eliminar todo este directorio y volver a instalar todo lo demás que desee conservar).

Gran parte del tiempo, simplemente puede salirse con la suya eliminando el archivo A/B.pm (para el módulo A::B ) de su perllib, que al menos dejará el módulo inutilizable. La mayoría de los módulos también contienen una lista de archivos para ser instalados (llamado un "manifiesto"), así que si puede encontrar eso, sabrá qué archivos puede eliminar.

Sin embargo, ninguno de estos enfoques abordará los módulos que se instalaron como dependencias. No hay una buena forma (automatizada) de saber si hay algo más que dependa de ese módulo, por lo que tendrá que desinstalarlo manualmente también una vez que esté seguro.

La dificultad para desinstalar módulos es una de las razones por las que muchos desarrolladores de Perl están utilizando un sistema de control de revisiones para realizar un seguimiento de las instalaciones, por ejemplo, ver el artículo de Brian Foy como suplemento de su próximo libro que trata el uso de git para la administración de paquetes.


Dado que en el momento de la instalación de cualquier módulo, coloca principalmente los archivos .pm correspondientes en los directorios respectivos. Por lo tanto, si desea eliminar el módulo solo con algún propósito de prueba o temporalmente mejor, busque la ruta donde se almacena el módulo utilizando perldoc -l <MODULE> y luego simplemente mueva el módulo desde allí a otra ubicación. Este enfoque también se puede probar como una solución más permanente, pero no conozco ninguna consecuencia negativa, ya que lo hago principalmente para las pruebas.



No puedes. No hay una característica en mi cliente de CPAN para hacer tal cosa. Estábamos hablando de cómo podríamos hacer algo así en el Taller Perl QA de este fin de semana, pero en general es difícil por todas las razones que mencionó Ether.