2012-03-05 27 views
12

Ho scritto alcune librerie Perl (.pm) e Perlscripts (.pl) su Ubuntu e ho bisogno di distribuirle ai miei colleghi nel mio ufficio. Questi script e librerie richiedono librerie di terze parti. Voglio renderlo molto semplice.Esiste un modo più semplice per creare il pacchetto perl

Informazioni su di me.

  • So come creare uno script Perl.
  • So come creare file bash.
  • non ho alcuna esperienza nella creazione di file di FARE, rpm, deb, ecc
+0

Se tutti i colleghi hanno Ubuntu (preferibilmente la stessa versione) e ce ne sono abbastanza, potrebbe essere utile imparare come creare un pacchetto '* .deb'. –

+0

@BasileStarynkevitch, non voglio renderlo specifico. Sono utenti di linux o Mac –

+0

Hai letto [Module :: Build] (http://search.cpan.org/dist/Module-Build/lib/Module/Build.pm)? – Konerak

risposta

15

Mi consiglia di utilizzare Module::Starter per impostare un modello per ogni modulo. Una volta installato, è possibile chiamare module-starter dalla riga di comando, ad esempio:

module-starter --module=My::Module --author="Jessada Thutkawkorapin" [email protected] 

o, se si vuole una distribuzione con più moduli:

module-starter --distro=Foo --module=Foo,Foo::Bar,Foo::Baz --author="Jessada Thutkawkorapin" [email protected] 

Poi, basta sovrascrivere i file .pm con i moduli , includere eventuali test unitari che si desidera eseguire (i test predefiniti controllano fondamentalmente la sintassi del modulo insieme alla sintassi del pod). Un'installazione di base dei moduli viene poi fatto tramite

perl Makefile.PL 
make 
make test 
make install 

(tecnicamente, make test è facoltativo, ma è altamente consigliato).

Ora, se questi moduli si basano su altri moduli CPAN, quindi è possibile utilizzare il modulo CPAN per installarli, per esempio:

use strict; 
use warnings; 
use CPAN; 

#populate however you'd like, either hard-coded, read from a file, etc. 
my @modules_to_install=(); 

foreach(@modules_to_install) 
{ 
    CPAN::Shell->install($_); 
} 

Quindi, è possibile distribuire una zip/tarball/etc con le cartelle e file che module-starter sono stati avviati (e che sono stati modificati) insieme allo script precedente per installare eventuali dipendenze CPAN e chiamarlo, ad esempio, cpan_install.pl. Se vuoi, puoi quindi avvolgere tutto in uno script finale chiamato, per esempio, install.pl che fa tutte queste cose.

+0

Prevedibilmente, il mio problema principale qui è che come e dove posso specificare la posizione del mio script? Tutti i miei script sono sotto /bin e my .pm sono sotto /bin/lib –

+2

Bene, per ogni modulo (e per la distro, se si utilizza l'opzione '--distro'),' module-starter' include ' lib' e 't' le directory, insieme ad altre regole generali che puoi ignorare. Una volta installati i moduli (tramite 'perl Makefile.PL; make; make test; make install'), vengono installati nella sottodirectory' site_perl' di qualsiasi distribuzione Perl che si sta utilizzando. –

+8

Valore inferiore per [richiamare personalmente il CPAN per installare i moduli mancanti] (http://stackoverflow.com/q/8183293). Invece dichiarare le dipendenze con ['PREREQ_PM'] (https://metacpan.org/module/ExtUtils::MakeMaker#PREREQ_PM) in modo che finiscano nel meta file della distro, vedi anche esempi in http://stackoverflow.com/ a/7664993 e http://stackoverflow.com/a/2606677. – daxim

2

Il mio metodo abituale in questi giorni è copiare semplicemente un file Build.PL da una delle mie distribuzioni esistenti e andare da lì. Ovviamente questa non è una strategia utile per il primo, ma CPAN è pieno di migliaia di questi file.

Per una semplice distribuzione di file singolo-.pm, è probabilmente più semplice iniziare copiando il file Build.PL di qualcun altro e modificare i campi come appropriato per il tuo caso. Probabilmente tutto ciò che dovrebbe essere necessario modificare sono i campi module_name e requires.

Ecco un semplice uno dei miei si può rubare^W ispirarsi:

use strict; 
use warnings; 

use Module::Build; 

my $build = Module::Build->new(
    module_name => 'Your::Name::Here', 
    requires => { 
     'Your::Requirements::Here' => '1.23', 
    }, 
    build_requires => { 
     'Test::More' => 0, 
    }, 
    license => 'perl', 
    create_makefile_pl => 'traditional', 
    create_license => 1, 
    create_readme => 1, 
); 

$build->create_build_script; 

Questi campi, al fine, media:

  • Il nome del modulo primario nella distribuzione - qui è preso il nome della distribuzione stessa, così come la sua versione e il sommario astratto
  • Altri moduli che questa distribuzione dipenderà dal costruire o da eseguire
  • Altri moduli che questa distribuzione dipenderà da costruire, ma non saranno necessarie una volta che è installato (in genere questo sarà Test:: moduli o altri strumenti di compilazione)
  • I termini di licenza applicate alla distribuzione
  • creare un lascito Makefile.PL per i clienti CPAN più vecchi che non capiscono il protocollo Build.PL
  • Creare un file LICENSE automaticamente dai termini di licenza sopra riportate
  • Creare un file README automaticamente ruotando la documentazione POD del modulo principale in chiaro
Problemi correlati