2013-03-21 14 views
7

Ich arbeite an einem small open-source Perl project mit Catalyst, Open Street Map und Dutzenden von Modulen. Ich versuche so viele Module wie möglich im CPAN zu verwenden, weil es nicht mein Ziel ist, das Rad neu zu erfinden.Wie wird die Installation von Modulen verwaltet, die von einem Open-Source-Perl-Projekt verwendet werden?

All diese Sachen wurden über cpanm und local :: lib installiert. Jedes Mal, wenn ich etwas Neues brauche, installiere ich ein paar Module und Abhängigkeiten (es ist so einfach mit cpanm). Nun, ich frage mich, wie die Leute, die mein Projekt klonen, Dutzende von Modulen ohne schreckliche Kopfzerbrechen installieren könnten?

Was sind die besten Praktiken dafür? Ich soll alle benötigten Module in Makefile.pl auflisten? Ich bin jetzt besorgt darüber, weil ich hart an diesem Projekt gearbeitet habe, vielen guten Praktiken gefolgt bin, aber in diesem speziellen Punkt einen Fehler begangen habe (um nicht darüber nachzudenken).

Ich brauche einen Rat zu diesem Problem, weil alles so magisch erscheint, dass ich nicht glaube, dass es ausreicht, die Modulnamen im Makefile mit dem Schlüssel 'require' aufzulisten. Ich hoffe auch, dass es nicht notwendig ist, alle Abhängigkeiten in das Projekt zu integrieren und all dieses riesige Paket für spätere Verwendungen festzulegen.

Antwort

1

Sie sollten nur diejenigen Module (in Makefile.PL) auflisten, die Sie direkt benötigen (d. H. Diejenigen, die Sie in Ihren Modulen use oder require haben). Sie müssen sich keine Gedanken über die Module machen, die indirekt benötigt werden (d. H. Durch die Module, die Sie verwenden); Das ist die Aufgabe des Installers.

Um eine Liste der von Ihnen verwendeten Module zu erhalten, können Sie die Liste natürlich manuell kompilieren. Aber wenn Sie The Definitive Guide to Catalyst haben, gibt es eine praktische Bash-Funktion auf Seite 129, die ich nicht sicher bin, kann ich hier reproduzieren. Es gibt auch Perl::PrereqScanner::App, die ich nicht direkt benutzt habe, die aber von Dist :: Zilla benutzt wird.

FWIW, wenn Sie Dist::Zilla verwenden, um Ihre Distribution zu verwalten (was ich auch für private Projekte tue, die ich nicht in CPAN hochlade), kann es Abhängigkeiten für Sie verfolgen (und tut dies standardmäßig).

+0

Danke @ Edward-Baudrez für Ihre Antwort. Es ist schade, dass ich Perl :: PrereqScanner :: App nicht benutzt habe, jetzt habe ich das Gefühl, dass ich das Rad mit dem schlechtesten neu erfunden habe. – smonff

4

Wenn Sie Catalyst verwenden, können Sie die Module, die Sie als Abhängigkeiten benötigen, in der Makefile.PL, die für Ihre Catalyst-Anwendung erstellt wurde, hinzufügen.

+1

Ich könnte nützlich sein, darauf hinzuweisen, dass das OP nur die CPAN-Module auflisten muss, die in 'use'-Anweisungen in seinem Code erscheinen. –

+0

@ SinanÜnür das ist ein wichtiger Punkt wenn man hunderte von Modulen installiert aber nur einige davon "benutzt"! – smonff

1

Ich würde empfehlen, einen Blick auf carton (von dem gleichen Autor wie der awesome cpanm).

Ich bin ein großer Fan von Rubys bundler und Karton Dokumentation beschreibt es als "Bundler für Perl". Ich habe vor einiger Zeit damit experimentiert und es sah sehr vielversprechend aus.