it-swarm.it

Qual è il modo più semplice per installare un modulo Perl mancante?

Ottengo questo errore:

Can't locate Foo.pm in @INC

Esiste un modo più semplice per installarlo che scaricare, decomprimere, creare, ecc.?

166
dreeves

Su Unix :

di solito si avvia cpan nella Shell:

# cpan

e digitare

install Chocolate::Belgian

o in forma abbreviata:

cpan Chocolate::Belgian

Su Windows :

Se si utilizza ActivePerl su Windows, PPM (Perl Package Manager) ha molte delle stesse funzionalità di CPAN.pm.

Esempio:

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

vedi Come installo i moduli Perl? nelle FAQ CPAN

Molte distribuzioni spediscono molti pacchetti Perl come pacchetti.

  • Debian/Ubuntu: apt-cache search 'Perl$'
  • Arch Linux: pacman -Ss '^Perl-'
  • Gentoo: categoria dev-Perl

Dovresti preferirli sempre in quanto beneficerai degli aggiornamenti automatici (di sicurezza) e della facilità di rimozione . Questo può essere piuttosto complicato con lo strumento cpan stesso.

Per Gentoo esiste uno strumento di Nizza chiamato g-cpan che costruisce/installa il modulo da CPAN e crea un pacchetto Gentoo (- ebuild ) per te.

202

Prova App :: cpanminus :

# cpanm Chocolate::Belgian

È ottimo solo per installare le cose. Non fornisce nessuna delle funzionalità più complesse di CPAN o CPANPLUS, quindi è facile da usare, a patto che tu sappia quale modulo vuoi installare. Se non hai già cpanminus, digita:

# cpan App::cpanminus

per installarlo.

È anche possibile installarlo senza usare cpan. La procedura di base bootstrap è,

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

Per maggiori informazioni vai alla pagina App :: cpanminus e guarda la sezione sull'installazione.

61
Philip Potter

Noto alcune persone che suggeriscono una corsa in Sud America. In passato era necessario installarlo nella directory di sistema, ma le versioni moderne di Shell CPAN consentono di configurarlo per utilizzare Sudo solo per l'installazione. Questo è molto più sicuro, poiché significa che i test non vengono eseguiti come root.

Se si dispone di una vecchia shell CPAN, è sufficiente installare il nuovo cpan ("installa CPAN") e quando si ricarica la shell, dovrebbe essere richiesto di configurare queste nuove direttive.

Al giorno d'oggi, quando mi trovo su un sistema con un vecchio CPAN, la prima cosa che faccio è aggiornare Shell e configurarlo per farlo in modo da poter fare la maggior parte del mio lavoro di cpan come un normale utente.

Inoltre, suggerirei vivamente che gli utenti Windows indagino su fragola Perl . Questa è una versione di Perl fornita con una shell CPAN preconfigurata e un compilatore. Include anche alcuni moduli Perl difficili da compilare con le loro dipendenze dalla libreria C esterna, in particolare XML :: Parser. Ciò significa che puoi fare la stessa cosa di ogni altro utente Perl quando si tratta di installare moduli, e le cose tendono a "semplicemente funzionare" molto più spesso.

28
Dave Rolsky

Se sei su Ubuntu e vuoi installare il modulo Perl preconfezionato (ad esempio geo :: ipfree) prova questo:

 $ apt-cache search Perl geo :: ipfree 
 libgeo-ipfree-Perl - Un paese di ricerca dell'indirizzo IP Modulo Perl 
 
 $ Sudo apt-get installa libgeo-ipfree-Perl 
23
Otto

Un paio di persone hanno menzionato l'utilità cpan, ma è molto più che avviare una Shell. Dagli semplicemente i moduli che vuoi installare e lascia che funzioni.

$Prompt> cpan Foo::Bar

Se non gli dai argomenti, avvia la shell CPAN.pm. Funziona su Unix, Mac e dovrebbe andare bene su Windows (specialmente Strawberry Perl).

Ci sono molte altre cose che puoi fare anche con lo strumento cpan. Ecco un riepilogo delle funzionalità correnti (che potrebbero essere più recenti di quelle fornite con CPAN.pm e 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

Vedi anche Sì, anche tu puoi usare CPAN . Mostra come è possibile utilizzare CPAN senza avere accesso root o Sudo.

10
Corion

Otto ha fatto un buon suggerimento . Questo funziona anche per Debian, così come per qualsiasi altro derivato Debian. Il pezzo mancante è cosa fare quando la ricerca di apt-cache non trova qualcosa.

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

Quindi ogni volta che hai un modulo casuale che desideri installare:

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

Questo ti darà un pacchetto deb che puoi installare per ottenere Some :: Random :: Module. Uno dei grandi vantaggi qui sono le pagine man e gli script di esempio in aggiunta al modulo stesso saranno collocati nella posizione scelta dalla tua distribuzione. Se la distro esce mai con un pacchetto ufficiale per una versione più recente di Some :: Random :: Module, verrà automaticamente installata quando apt-get upgrade.

8
mikegrb

Risposta già accettata e risposta accettata, ma comunque:

IMHO il modo più semplice per installare i moduli CPAN (su sistemi come unix e non avere idea delle meraviglie) è:

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

Quanto sopra sta installando il "programma di installazione dei moduli CPAN a configurazione zero" chiamato cpanm. (L'installazione può richiedere alcuni minuti - non interrompere il processo)

e dopo - semplicemente:

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

Molti consigli per CPAN.pm, il che è fantastico, ma se stai usando Perl 5.10 allora hai anche accesso a CPANPLUS.pm che è come CPAN.pm ma meglio.

E, naturalmente, è disponibile su CPAN per le persone che utilizzano ancora versioni precedenti di Perl. Perché non provare:

$ cpan CPANPLUS
6
Dave Cross

Molte volte capita che il comando di installazione di cpan fallisca con il messaggio come "make test aveva restituito uno stato errato, non si installa senza forzare"

In tal caso, di seguito è riportato il modo di installare il modulo:

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

Su Ubuntu la maggior parte dei moduli Perl sono già impacchettati, quindi l'installazione è molto più veloce della maggior parte degli altri sistemi che devono essere compilati.

Per installare Foo::Bar in un prompt, ad esempio, di solito basta:

Sudo apt-get install libfoo-bar-Perl

Purtroppo non tutti i moduli seguono questa convenzione di denominazione.

4
Myforwik

Anche dovrebbe funzionare:

cpan -i module_name
4
Mandar Pande

Usa il comando cpan come cpan Modulename

$ cpan HTML::Parser

Per installare le dipendenze, seguire automaticamente le istruzioni seguenti

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

Preferisco App :: cpanminus , installa le dipendenze automaticamente. Basta fare

$ cpanm HTML::Parser
4
Chankey Pathak

Il modo più semplice per me è questo:

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

a) rilevazione/risoluzione/installazione automatiche della dipendenza ricorsiva

b) è un onliner Shell, ottimo per gli script di installazione

3
Mister X

2 modi che conosco:

SANDO PPM:

Con Windows (ActivePerl) ho usato ppm

dalla riga di comando digitare ppm. Al prompt ppm ...

ppm> install foo

o

ppm> search foo

per ottenere un elenco di moduli foo disponibili. Digitare aiuto per tutti i comandi

SANDO CPAN:

puoi anche usare CPAN in questo modo (* nix systems):

Perl -MCPAN -e 'Shell'

ti dà un prompt

cpan>

al prompt ...

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

digitare h per ottenere un elenco di comandi per cpan

3
JWHEAT

Su Fedora Linux o Enterprise Linux, yum tiene traccia anche delle dipendenze della libreria Perl. Quindi, se il modulo Perl è disponibile e alcuni pacchetti rpm esportano quella dipendenza, installerà il pacchetto giusto per te.

yum install 'Perl(Chocolate::Belgian)'

(molto probabilmente il pacchetto Perl-Chocolate-Belgian, o anche il pacchetto ChocolateFactory)

3
Michal Ingeli

Su Fedora puoi usare

# yum install foo

purché Fedora abbia un pacchetto esistente per il modulo.

3
Bruce Alderman

Se vuoi mettere il nuovo modulo in una posizione personalizzata che la tua cpan Shell non è configurata per l'uso, allora forse sarà utile quanto segue.

 #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 volte è possibile utilizzare yum search foo per cercare il relativo modulo Perl, quindi utilizzare yum install xxx per installare.

2
Chris Forever

Sembra che tu abbia già ricevuto la tua risposta, ma ho pensato di entrare. Questo è quello che faccio in alcuni script su Ubuntu (o server 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";
    }
}

Questo funziona bene per me, forse c'è qualcosa qui che puoi usare.

1
Ed Dunn

Su Windows con la distribuzione ActiveState di Perl, utilizzare il comando ppm .

1
PW.

La semplice esecuzione di cpan Foo::Bar su Shell servirebbe allo scopo.

1
Kamal Nayan