it-swarm-es.tech

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

Me sale este error:

Can't locate Foo.pm in @INC

¿Hay una forma más fácil de instalarlo que descargar, desempaquetar, crear, etc.?

164
dreeves

En Unix :

normalmente comienzas cpan en tu Shell:

# cpan

y escriba

install Chocolate::Belgian

o en forma corta:

cpan Chocolate::Belgian

En Windows :

Si está utilizando ActivePerl en Windows, 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 los módulos de Perl? en el CPAN FAQ

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

Debería siempre preferirlos, ya que se beneficia de la (seguridad) automática actualizaciones y la facilidad de eliminación . Esto puede ser bastante complicado con la herramienta cpan.

Para Gentoo, hay una herramienta de Niza llamadag-cpanque construye/instala el módulo desde CPAN y crea un paquete Gentoo ( ebuild ) para usted.

201
Benedikt Waldvogel

Probar Aplicación :: cpanminus :

# cpanm Chocolate::Belgian

Es genial solo para tener cosas instaladas. 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 tiene cpanminus, simplemente escriba:

# 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.

60
Philip Potter

Tomo nota de algunas personas que sugieren una carrera cpan debajo de Sudo. Eso solía ser necesario para instalar en el directorio del sistema, pero las versiones modernas de CPAN Shell le permiten configurarlo para usar Sudo just para la instalación. Esto es mucho más seguro, ya que significa que las pruebas no se ejecutan como root.

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

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

Además, sugiero que los usuarios de Windows investiguen strawberry Perl . Esta es una versión de Perl que viene empaquetada con un CPAN Shell preconfigurado, así como un compilador. También incluye algunos módulos Perl difíciles de compilar con sus dependencias de la biblioteca C externa, 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 "funcionar" mucho más a menudo.

28
Dave Rolsky

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

 $ apt-cache search Perl geo :: ipfree 
 libgeo-ipfree-Perl - Un país de búsqueda de la dirección IP del módulo Perl 
 
 $ Sudo apt-get instala libgeo-ipfree-Perl 
22
Otto

Un par de personas mencionaron la utilidad cpan, pero es más que simplemente iniciar un Shell. Solo dale los módulos que quieres instalar y déjalo funcionar.

$Prompt> cpan Foo::Bar

Si no le da ningún argumento, se inicia el Shell CPAN.pm. Esto funciona en Unix, Mac, y debería estar bien en Windows (especialmente en 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 pueden 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.
15
brian d foy

Sudo Perl -MCPAN -e 'install Foo'

11
dreeves

También vea Sí, incluso usted puede usar CPAN . Muestra cómo se puede usar CPAN sin tener acceso de root o Sudo.

10
Corion

Otto hizo una buena sugerencia . Esto también funciona para Debian, así como cualquier otro derivado de Debian. La pieza que falta es qué hacer cuando la búsqueda de apt-cache no encuentra algo.

$ Sudo apt-get install dh-make-Perl build-essential apt-file
$ Sudo apt-file update

Luego, cuando tengas un módulo aleatorio que quieras 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 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 elegida por su distro. Si alguna vez sale la distribución con un paquete oficial para una versión más reciente de Some :: Random :: Module, se instalará automáticamente cuando se actualice apt-get.

8
mikegrb

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

En mi opinión, la forma más sencilla de instalar módulos CPAN (en sistemas tipo UNIX, y no tengo idea de las maravillas) es:

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

Lo anterior es instalar el "instalador de módulos CPAN de configuración cero" llamado cpanm. (Puede tardar varios minutos en instalarse, no interrumpa el proceso)

y después - simplemente:

cpanm Foo
cpanm Module::One
cpanm Another::Module
7
jm666

Hay muchas recomendaciones para CPAN.pm, que es genial, pero si estás usando Perl 5.10, entonces también tienes acceso a CPANPLUS.pm que es como CPAN.pm pero mejor.

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

$ cpan CPANPLUS
6
Dave Cross

Muchas veces sucede que el comando de instalación de cpan falla con el mensaje como - "make test ha devuelto un estado incorrecto, no se instala sin forzar"

En ese caso a continuación se muestra la forma de instalar el módulo:

Perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
5
jaxbihani

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 compilar.

Para instalar Foo::Bar en una solicitud de comando, por ejemplo, usualmente lo hace:

Sudo apt-get install libfoo-bar-Perl

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

4
Myforwik

Incluso debería funcionar:

cpan -i module_name
4
Mandar Pande

Usa el comando cpan como cpan Modulename

$ cpan HTML::Parser

Para instalar dependencias sigue automáticamente 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
4
Chankey Pathak

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

Perl_MM_USE_DEFAULT=1 Perl -MCPAN -e 'install DateTime::TimeZone'

a) Detección/resolución recursiva automática de dependencias/instalación

b) es un Shell onliner, bueno para los scripts de configuración

3
Mister X

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 los modulos foo disponibles. Escriba help para todos los comandos

USANDO CPAN:

también puede usar CPAN como este ( * nix systems ):

Perl -MCPAN -e 'Shell'

te consigue un aviso

cpan>

en el aviso ...

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

escribe h para obtener una lista de comandos para cpan

3
JWHEAT

En Fedora Linux o Enterprise Linux, yum también realiza un seguimiento de las dependencias de la biblioteca Perl. Entonces, si el módulo Perl está disponible y algunos paquetes rpm exportan esa dependencia, instalará el paquete correcto para usted.

yum install 'Perl(Chocolate::Belgian)'

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

3
Michal Ingeli

En Fedora puedes usar

# yum install foo

mientras Fedora tenga un paquete existente para el módulo.

3
Bruce Alderman

Si desea colocar el nuevo módulo en una ubicación personalizada para la cual su Shell cpan no está configurado para usar, entonces tal vez, 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
2
venkrao

A veces, puede usar el yum search foo para buscar el módulo Perl relativo, y luego usar el yum install xxx para instalar.

2
Chris Forever

Parece que ya tienes tu respuesta, pero me di cuenta de que iba a hacer el timbre. 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([email protected]){
        system("cpanm $x");
        eval "use $x";
    }
}

Esto funciona bien para mí, quizás haya algo aquí que puedas usar.

1
Ed Dunn

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

1
PW.

Simplemente ejecutando cpan Foo::Bar en Shell serviría al propósito.

1
Kamal Nayan