Come posso usare un nuovo modulo Perl senza permessi di installazione?
-
05-07-2019 - |
Domanda
Ecco la mia situazione: non so quasi nulla di Perl ma è l'unica lingua disponibile su un porting machine. Ho solo i permessi per scrivere nella mia area di lavoro locale e non nella posizione di installazione di Perl. Devo usare il Parallel :: ForkManager modulo Perl da CPAN
Come posso usare questo Parallel :: ForkManager senza fare un'installazione centrale? Esiste una variabile d'ambiente che posso impostare in modo che si trovi?
Grazie
JD
Soluzione
Da perlfaq8: Come posso mantenere la mia directory modulo / libreria? :
Quando costruisci moduli, indica a Perl dove installare i moduli.
Per le distribuzioni basate su C, utilizzare l'opzione INSTALL_BASE durante la generazione di Makefile:
perl Makefile.PL INSTALL_BASE=/mydir/perl
Puoi impostarlo nella tua configurazione CPAN.pm in modo che i moduli si installino automaticamente nella directory della libreria privata quando si utilizza la shell CPAN.pm:
% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit
Per le distribuzioni basate su C, utilizzare l'opzione --install_base:
perl Build.PL --install_base /mydir/perl
Puoi configurare CPAN.pm per usare automaticamente anche questa opzione:
% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit
INSTALL_BASE dice a questi strumenti di inserire i tuoi moduli F. Vedi L per i dettagli su come eseguire il tuo nuovo moudles installati.
C'è un avvertimento con INSTALL_BASE, però, poiché agisce diversamente dalle impostazioni PREFIX e LIB delle versioni precedenti ExtUtils :: MakeMaker ha sostenuto. INSTALL_BASE non supporta installazione di moduli per versioni multiple di Perl o diverse architetture nella stessa directory. Dovresti considerare se tu lo voglio davvero e, se lo fai, usa PREFIX e LIB precedenti impostazioni. Vedere la documentazione di ExtUtils :: Makemaker per maggiori dettagli.
Altri suggerimenti
Dai un'occhiata a questo post da Mark Dominus
Estratto:
- Imposta PREFIX = X durante la creazione del Makefile
- Imposta INSTALLDIRS = vendor e VENDORPREFIX = X durante la creazione del Makefile
- O forse invece di VENDORPREFIX devi impostare INSTALLVENDORLIB o qualcosa del genere
- O forse invece di impostarli durante la creazione del Makefile è necessario impostarli durante l'esecuzione del target make install
- Imposta LIB = X / lib durante la creazione del Makefile
- Usa PAR
- Usa local :: lib
Mark offre anche un'altra soluzione nel suo blog che richiede un po 'più di spazio per descriverlo, ma si riduce a eseguire make e make test ma non a installarlo e quindi a usare le cose in blib /.
Scarica il modulo del pacchetto CPAN in una cartella:
wget http://search.cpan.org/CPAN/authors/id/S/SZ/SZABGAB/Parallel-ForkManager-1.06.tar.gz
gunzip Parallel-ForkManager-1.06.tar.gz
tar -xvf Parallel-ForkManager-1.06.tar
prima di creare una cartella nella home per archiviare i moduli locali, ora vai nella cartella scaricata ed esegui i seguenti mm:
perl Makefile.PL PREFIX=/home/username/myModules
make
make test
make install
ottieni il percorso per ForkManager dalla cartella installata, / home / nomeutente / myModules e individuare la cartella parallela e ottenere il percorso completo per questo.
Ora nel tuo file perl mettili all'inizio
use lib '/home/username/myModules/bin.../Parallel';
use parallel::ForkManager;
- Dovrebbe farlo.
C'è la variabile d'ambiente PERL5LIB e -I
sulla riga di comando quando si tratta di usare il modulo. Esistono meccanismi per dire a CPAN e CPANPLUS.
Ci sono informazioni nella domanda 5 del manuale CPAN (perldoc CPAN, oppure guarda CPAN stesso) .
use lib 'directory';
use Parallel::ForkManager;
È possibile utilizzare l'opzione della riga di comando -I
(maiuscolo i) seguita dalla directory in cui si posizionerà il modulo; oppure prova " usa lib " direttiva seguita dalla directory.
perl Makefile.PL LIB=/my/perl_modules/lib/
make
make install
PERL5LIB=$PERL5LIB:/my/perl_modules/lib/
perl myperlcode.pl
usa l'opzione cpanm -l $ DIR_NAME
.
Valuta l'utilizzo di cpanminus, un suggerimento su quest'altra discussione