2009-02-12 15 views
56

Utilizzo una macchina Linux ospitata in modo che non disponga delle autorizzazioni per scrivere nella directory /usr/lib.Come posso installare un modulo CPAN in una directory locale?

Quando provo ad installare un modulo CPAN facendo il solito:

perl Makefile.PL 
make test 
make install 

quel modulo viene estratto in una cartella blib/lib/. Ho mantenuto use blib/lib/ModuleName ma il compilatore continua a dire che il modulo non può essere trovato . Ho provato a copiare il file .pm nella directory locale e mantenuto require ModuleName ma ancora mi dà qualche errore.

Come posso installare un modulo in qualche altra directory e usarlo?

+1

In generale, è necessario fornire il messaggio di errore. "Un errore" non aiuta molto. – jrockway

+5

possibile duplicato di [Come posso usare un nuovo modulo Perl senza autorizzazioni di installazione?] (Http://stackoverflow.com/questions/251705/how-can-i-use-a-new-perl-module-without-install -permissions) – daxim

+0

IMPORTANTE .. alcuni moduli usano Build.PL invece di Makefile.PL (o lo avvolgono con uno o l'altro), in alcuni casi, (come quando si eseguono i test), l'installazione da/a un percorso con spazi in confonderà il MANIFEST e causerà il fallimento del test, di solito questo accade solo quando è impostato RELEASE_TESTING, quindi assicurati che non sia sulla tua macchina. Se ci sono errori MANIFEST come questo allora ci sono probabilmente altri in agguato, attaccati a percorsi che non hanno spazi bianchi (spazio, tab, non chiaro, ecc.) – osirisgothra

risposta

32

Ho avuto un problema simile, dove ho potuto nemmeno installare locale :: lib

ho creato un programma di installazione che ha installato il modulo da qualche parte relativa ai file .pl

L'installazione va come:

perl Makefile.PL PREFIX=./modulos 
make 
make install 

Poi, nel file .pl che richiede il modulo, che è in ./

use lib qw(./modulos/share/perl/5.8.8/); # You may need to change this path 
use module::name; 

Il resto dei file (makefile.pl, module.pm, ecc.) Non richiede modifiche.

È possibile chiamare il file .pl con solo

perl file.pl 
+13

Non c'è alcun motivo per modificare il tuo script - imposta PERL5LIB invece di usando 'use lib'. local :: lib si prende cura di questo per te - segui le sue istruzioni e dovresti stare bene. – jrockway

+9

usa INSTALL_BASE invece di PREFIX. –

+0

perl Makefile.PL INSTALL_BASE =/home/irraju/PadWalker mi ha fornito questo errore "'INSTALL_BASE' non è un nome di parametro MakeMaker noto." Anche l'opzione PREFIX mi ha dato lo stesso – Ram

19

local::lib ti aiuterà. Convincerà "make install" (e "Build install") per installare in una directory in cui è possibile scrivere, e dirà a perl come arrivare a quei moduli.

In generale, se si desidera utilizzare un modulo che si trova in una directory blib /, si desidera dire perl -Mblib ... dove ... è come si invocherebbe normalmente lo script.

+0

I ** veramente ** consiglio di usare local :: lib. Si prende cura di tutti i piccoli dettagli. – melo

+0

Purtroppo non riesce a passare "make test" quando provo ad installarlo. – reinierpost

59

altre risposte già su StackOverflow:

Da perlfaq8:

0.123.


How do I keep my own module/library directory?

Quando si compila i moduli, dire a Perl dove installare i moduli.

Per le distribuzioni basate su Makefile.PL, utilizzare l'opzione INSTALL_BASE quando generare Makefile:

perl Makefile.PL INSTALL_BASE=/mydir/perl 

È possibile impostare questo nella configurazione CPAN.pm modo moduli installano automaticamente nella directory biblioteca privata quando si utilizza il CPAN.pm shell:

% cpan 
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl 
cpan> o conf commit 

Per le distribuzioni basate su Build.PL, utilizzare l'opzione --install_base:

perl Build.PL --install_base /mydir/perl 

È possibile configurare CPAN.pm utilizzare automaticamente questa opzione anche:

% cpan 
cpan> o conf mbuildpl_arg '--install_base /mydir/perl' 
cpan> o conf commit 
+1

Penso che dovresti aggiungere delle virgolette: 'o conf mbuild_arg '--install_base/mydir/perl'' – Amro

+4

Penso che le persone che trovano problemi dovrebbero modificare il post. :) –

+0

Brian, una domanda: il collegamento che hai fornito indica che il parametro '--install_base' è passato a' perl Build.PL'; ma 'mbuild_arg' parla di argomenti in'./Build'. Forse vuoi dire 'mbuildpl_arg'? O c'è un errore in perlfaq? – skaurus

3

Consiglio vivamente lo Perlbrew. Ti consente di eseguire più versioni di Perl, installare pacchetti, modificare gli interni di Perl se lo desideri, tutte le normali autorizzazioni utente.

+0

Il collegamento è morto? – ceving

2

Per le distribuzioni basate su Makefile.PL, utilizzare l'opzione INSTALL_BASE quando generare Makefile:

perl Makefile.PL INSTALL_BASE=/mydir/perl 
Problemi correlati