¿Cuál es la forma más fácil de instalar un módulo Perl perdido?

192

Me sale este error:

Can't locate Foo.pm in @INC

¿Hay una manera más fácil de instalarlo que descargar, descomprimir, hacer, etc.?

dreeves
fuente
1
Si el módulo en cuestión es un módulo central, consulte Cómo solucionar "No se puede encontrar Archive / Tar.pm" .
ikegami
Tenga mucho cuidado con la seguridad: lo que se necesita para garantizar que los módulos no se hayan modificado debe descargarse de forma segura desde un sitio confiable. Vea mi respuesta sobre el uso de cpan.
vinc17

Respuestas:

226

En Unix :

generalmente comienzas cpan en tu shell:

# cpan

y escribe

install Chocolate::Belgian

o en forma corta:

cpan Chocolate::Belgian

En Windows :

Si está utilizando ActivePerl en Windows, el PPM (Perl Package Manager) tiene casi la misma funcionalidad que CPAN.pm.

Ejemplo:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

ver ¿Cómo instalo módulos Perl? en las preguntas frecuentes de CPAN

Muchas distribuciones envían muchos módulos perl como paquetes.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: categoría dev-perl

Usted debe siempre prefiere como usted se beneficia de seguridad automáticas () actualizaciones y la facilidad de eliminación . Esto puede ser bastante complicado con el cpan herramienta sí.

Para Gentoo hay una buena herramienta llamada g-cpan que construye / instala el módulo desde CPAN y crea un paquete Gentoo ( ebuild ) para usted.

Benedikt Waldvogel
fuente
14
La forma corta es simplemente "chocolate cpan :: belga" de la línea de comando :)
brian d foy
3
IIRC, el último ActivePerl ya no tiene línea de comandos ppm, ahora abre una GUI elegante.
Kev
66
Solo "ppm" abre la GUI, pero seguido de comandos permanece en la línea de comandos. Entonces, "ayuda de ppm", "instalación de ppm ...", etc.
Bill Ruppert
Tenga en cuenta que ppm utiliza guiones para el separador de ruta del módulo, no los dos puntos dobles habituales. (¿Tal vez porque los dos puntos significan unidades en dos?) Eso me tiene varias veces;)
Matthew Lock
3
@MatthewLock: ppmutiliza guiones -porque especifica la distribución que desea instalar, lo cual es mucho más honesto. Por ejemplo, si lo cpaninstala LWP, LWP::Simpleo LWP::UserAgentinstalará la distribución libwww-perlpor usted. La mayoría de las distribuciones contienen un solo módulo con un nombre equivalente, pero hay varias excepciones como esa
Borodin
65

Pruebe la aplicación :: cpanminus :

# cpanm Chocolate::Belgian

Es genial solo para instalar cosas. No proporciona ninguna de las funciones más complejas de CPAN o CPANPLUS, por lo que es fácil de usar, siempre que sepa qué módulo desea instalar. Si aún no tienes cpanminus, solo escribe:

# cpan App::cpanminus

para instalarlo

También es posible instalarlo sin usar cpan. El procedimiento básico de arranque es,

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

Para obtener más información, vaya a la página App :: cpanminus y consulte la sección sobre instalación.

Philip Potter
fuente
77
Usar cpanpara instalar App::cpanminuses un poco extraño. Las instrucciones de instalación normales implican un procedimiento de arranque de descargar una parte de él desde cpanmin.us y usarlo para instalar el resto. Esto evita la configuración cpany la creación de un .cpandirectorio inútil (a partir de entonces) .
Chas. Owens
En Ubuntu, solo puede instalar cpanminusdesde la terminal. Me parece cpanmmejor que cpanporque no pone registros de errores en la pantalla, sino que los almacena en archivos de registro temporales y proporciona la ruta en caso de errores.
user13107
Recibo este error cuando intento su comando: No se puede encontrar strictly.pm en @INC (es posible que deba instalar el módulo estricto) (@INC contiene: / etc / perl
IgorGanapolsky
29

Observo a algunas personas que sugieren una ejecución de cpan en sudo. Solía ​​ser necesario instalarlo en el directorio del sistema, pero las versiones modernas del shell CPAN le permiten configurarlo para usar sudo solo para la instalación. Esto es mucho más seguro, ya que significa que las pruebas no se ejecutan como root.

Si tiene un antiguo shell CPAN, simplemente instale el nuevo cpan ("instalar CPAN") y cuando vuelva a cargar el shell, debería solicitarle que configure estas nuevas directivas.

Hoy en día, cuando estoy en un sistema con un antiguo CPAN, lo primero que hago es actualizar el shell y configurarlo para que pueda hacer la mayor parte de mi trabajo de cpan como usuario normal.

Además, sugeriría encarecidamente que los usuarios de Windows investiguen la fresa Perl . Esta es una versión de Perl que viene con un shell CPAN preconfigurado y un compilador. También incluye algunos módulos Perl difíciles de compilar con sus dependencias externas de la biblioteca C, en particular XML :: Parser. Esto significa que puede hacer lo mismo que cualquier otro usuario de Perl cuando se trata de instalar módulos, y las cosas tienden a "simplemente funcionar" mucho más a menudo.

Dave Rolsky
fuente
1
install CPAN¿de donde? $sudo apt-get install cpan?
isomorfismos el
1
@Lao Tzu: no, ya que CPAN es un módulo central de Perl y no está disponible como paquete DEB separado. Creo que en la mayoría de las situaciones es aún mejor usarlo App::cpanminus, es una alegría usarlo. Philip Potter lo sugiere en su respuesta aquí y puedes probar este Chas. Owens responde .
semana
25

Si está en Ubuntu y desea instalar el módulo perl preenvasado (por ejemplo, geo :: ipfree) intente esto:

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl - Un país para buscar el módulo Perl de la dirección IP

    $ sudo apt-get install libgeo-ipfree-perl
Otón
fuente
Esto es genial. Gracias.
Ivan X
16

Un par de personas mencionaron la utilidad cpan, pero es más que simplemente iniciar un shell. Simplemente dele los módulos que desea instalar y deje que funcione.

$prompt> cpan Foo::Bar

Si no le da ningún argumento, inicia el shell CPAN.pm. Esto funciona en Unix, Mac, y debería estar bien en Windows (especialmente Strawberry Perl).

Hay varias otras cosas que puede hacer con la herramienta cpan también. Aquí hay un resumen de las características actuales (que podrían ser más nuevas que la que viene con CPAN.pm y perl):

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.
brian d foy
fuente
11

sudo perl -MCPAN -e 'install Foo'

dreeves
fuente
Brillante, esto funcionó para mí justo ahora en Windows con Git perl, pero primero tuve que instalar GnuWin make
wytten
8

Otto hizo un buena sugerencia . Esto también funciona para Debian, así como para cualquier otro derivado de Debian. Lo que falta es qué hacer cuando apt-cache search no encuentra algo.

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

Luego, cuando tenga un módulo aleatorio que desee instalar:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

Esto le dará un paquete de Deb que puede instalar para obtener Some :: Random :: Module. Uno de los grandes beneficios aquí son las páginas man y los scripts de muestra, además del módulo en sí se colocarán en la ubicación de su distribución de elección. Si alguna vez sale la distribución con un paquete oficial para una versión más nueva de Some :: Random :: Module, se instalará automáticamente cuando realice la actualización.

mikegrb
fuente
7

Ya respondí y acepté la respuesta, pero de todos modos:

En mi humilde opinión, la forma más fácil de instalar módulos CPAN (en sistemas similares a Unix, y no tengo idea de las maravillas) es:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

Lo anterior está instalando el "instalador de módulos CPAN de configuración cero" llamado cpanm. (La instalación puede tardar varios minutos; no interrumpa el proceso)

y después, simplemente:

cpanm Foo
cpanm Module::One
cpanm Another::Module
jm666
fuente
6

Muchas recomendaciones para CPAN.pm, lo cual es genial, pero si lo estás usando Perl 5.10, también tienes acceso a lo CPANPLUS.pmque es CPAN.pmmejor.

Y, por supuesto, está disponible CPANpara las personas que todavía usan versiones anteriores de Perl. ¿Por qué no intentarlo?

$ cpan CPANPLUS
Dave Cross
fuente
Je, eso es lindo. Use CPAN.pm para reemplazarse con CPANPLUS. :)
brian d foy
5

Muchas veces sucede que el comando cpan install falla con el mensaje "hacer que la prueba haya devuelto un estado incorrecto, no se instalará sin fuerza"

En ese caso, la siguiente es la forma de instalar el módulo:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
jaxbihani
fuente
Desafortunadamente, esto produce: No se puede encontrar CPAN.pm en @INC (es posible que deba instalar el módulo CPAN) (@INC contiene: / etc / perl
IgorGanapolsky
4

En ubuntu, la mayoría de los módulos perl ya están empaquetados, por lo que la instalación es mucho más rápida que la mayoría de los otros sistemas que tienen que compilarse.

Para instalar Foo::Baren un símbolo del sistema, por ejemplo, generalmente solo debe hacer:

sudo apt-get install libfoo-bar-perl

Lamentablemente, no todos los módulos siguen esa convención de nomenclatura.

Myforwik
fuente
4

Incluso debería funcionar:

cpan -i module_name
serenesat
fuente
4

Use el comando cpan como cpan Modulename

$ cpan HTML::Parser

Para instalar dependencias automáticamente siga lo siguiente

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

Prefiero App :: cpanminus , instala dependencias automáticamente. Solo haz

$ cpanm HTML::Parser
Chankey Pathak
fuente
3

2 maneras que conozco:

USANDO PPM:

Con Windows (ActivePerl) he usado ppm

desde la línea de comando escriba ppm. En el indicador de ppm ...

ppm> install foo

o

ppm> search foo

para obtener una lista de módulos foo disponibles. Escribe ayuda para todos los comandos

USANDO CPAN:

También puede usar CPAN como este ( * sistemas nix ):

perl -MCPAN -e 'shell'

te da un aviso

cpan>

en el aviso ...

cpan> install foo  (again to install the foo module)

escriba h para obtener una lista de comandos para cpan

JWHEAT
fuente
1
También puede decir "$ cpan Foo :: Bar" para instalar directamente desde la línea de comandos. No es necesario una sola línea elegante o carcasa de CPAN. :)
brian d foy
3

En Fedora puedes usar

# yum install foo

siempre y cuando Fedora tenga un paquete existente para el módulo.

Bruce Alderman
fuente
3

En Fedora Linuxo Enterprise Linux, yumtambién rastrea las dependencias de la biblioteca perl. Entonces, si el módulo perl está disponible y algunos paquetes rpm exportan esa dependencia, instalará el paquete adecuado para usted.

yum install 'perl(Chocolate::Belgian)'

(muy probablemente el paquete perl-Chocolate-Belgian, o incluso el paquete ChocolateFactory)

Michal Ingeli
fuente
3

La forma más fácil para mí es esto:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'

a) detección / resolución / instalación automática de dependencia recursiva

b) es un shell onliner, bueno para guiones de configuración

Señor X
fuente
2

Si desea colocar el nuevo módulo en una ubicación personalizada que su shell cpan no esté configurado para usar, entonces quizás lo siguiente sea útil.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
venkrao
fuente
2

A veces puede usar yum search foopara buscar el módulo perl relativo, luego usar yum install xxxpara instalar.

Chris Forever
fuente
2

Solución segura

Muchas respuestas mencionan el uso de la cpanutilidad (que usa CPAN.pm) sin una palabra sobre seguridad. Por defecto, CPAN2.27 y las configuraciones anteriores urllistusan una URL http (es decir, http://www.cpan.org/ ), que permite ataques MITM, por lo tanto, es inseguro. Esto es lo que se usa para descargar los CHECKSUMSarchivos, por lo que debe cambiarse a una URL segura (por ejemplo, https://www.cpan.org/ ).

Entonces, después de ejecutar cpan y aceptar la configuración predeterminada, debe modificar el MyConfig.pmarchivo generado (se genera la ruta completa) de la siguiente manera. Reemplazar

'urllist' => [q[http://www.cpan.org/]],

por

'urllist' => [q[https://www.cpan.org/]],

Nota: https no es suficiente; También necesita un sitio web en el que pueda confiar. Por lo tanto, tenga cuidado si desea elegir un espejo arbitrario.

Entonces puedes usar cpande la manera habitual.

Mi informe de error en rt.cpan.org sobre la URL insegura.

vinc17
fuente
¿" Cpan.org " no se redirige a " cpan.org "?
Dave Everitt
1
@DaveEveritt La redirección de http a https es útil solo para la privacidad, por ejemplo, contra alguien que solo puede ver los datos que transitan en la red. Pero si un atacante controla la red (por ejemplo, un punto de acceso wifi público o alguna red local no protegida), puede ser posible un ataque man-in-the-middle , y el atacante usará su propio servidor (obviamente no https://www.cpan.org/).
vinc17
1

En Windows con la distribución ActiveState de Perl, use el comando ppm .

PW.
fuente
1

Simplemente ejecutar cpan Foo::Baren shell serviría el propósito.

Kamal Nayan
fuente
1

Parece que ya tienes tu respuesta, pero pensé que iba a intervenir. Esto es lo que hago en algunos scripts en un Ubuntu (o servidor Debian)

#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}

Esto funciona bien para mí, tal vez hay algo aquí que puedes usar.

Ed Dunn
fuente