Wie kann ich eine bestimmte Version eines Satzes von Perl-Modulen installieren?

72

Ich habe die Aufgabe, eine Produktionsumgebung zu replizieren, um viele Test- / Sitzumgebungen zu erstellen.

Eines der Dinge, die ich tun muss, ist, Perl mit allen Modulen aufzubauen, die im Laufe der Jahre installiert wurden (einschließlich interner und externer Module). Ich könnte einfach das Autobundle CPAN.pm verwenden, aber dies führt dazu, dass die Testumgebung viel neuere Versionen der externen Module der Produktion enthält.

Was ist der einfachste / beste Weg, um (viele) versionsspezifische Perl-Module zu erhalten und zu installieren?

Matthew Watson
quelle

Antworten:

39

Erstellen Sie Ihren eigenen CPAN-Spiegel mit genau dem, was Sie möchten. Stratopan.com , ein Dienst, und Pinto , Tools, die darauf aufbauen, können Ihnen dabei helfen.

Die CPAN-Tools installieren nur die neueste Version einer Distribution, da PAUSE nur die neueste Version indiziert. Sie können jedoch Ihr eigenes privates CPAN erstellen, das genau die gewünschten Verteilungen enthält. Sobald Sie einen eigenen CPAN-Spiegel mit nur dem haben, was Sie möchten, richten Sie Ihre CPAN-Tools nur auf diesen Spiegel, sodass nur diese Versionen installiert werden. Mehr dazu in einer Minute.

Nun möchten Sie mehrere Versionen davon haben. Sie können so viele Spiegel erstellen, wie Sie möchten, und Sie können die Spiegel auch in die Quellcodeverwaltung einbinden, damit Sie jede gewünschte Version des Spiegels überprüfen können.

Mit Tools wie CPAN :: Mini :: Inject können Sie Ihr eigenes CPAN einrichten. Schauen Sie sich meine Vorträge auf Slideshare an, um die grundlegenden Beispiele zu sehen, und einige meiner Videos auf Vimeo für einige der Demonstrationen. Schauen Sie sich alles an, dessen Titel "CPAN" oder "BackPAN" enthält. Ich denke, ich könnte auch in The Perl Review einiges darüber haben oder sollte es in der nächsten Ausgabe tun. :) :)

In letzter Zeit habe ich an einem Programm namens dpan (für DarkPAN) gearbeitet, das zufällige Verzeichnisse anzeigen, Perl-Verteilungen darin finden und die Struktur- und Indexdateien erstellen kann, die Sie benötigen. Wenn Sie dpan ausführen, erhalten Sie eine URL, auf die Ihr CPAN-Client verweist, und los geht's. Es ist Teil meines MyCPAN-Indexer-Projekts in Github . Es ist nicht ganz bereit für die unbeaufsichtigte öffentliche Nutzung, da ich hauptsächlich mit Firmenkunden zusammenarbeite, um deren Einrichtung anzupassen. Wenn Sie daran interessiert sind, können Sie mir gerne Fragen stellen.

Außerdem habe ich kürzlich CPAN :: PackageDetails veröffentlicht , mit denen Sie die richtige Indexdatei erstellen können. Es ist auch noch ein bisschen jung, aber wenn Sie etwas Besonderes brauchen, fragen Sie einfach.

brian d foy
quelle
1
Vielen Dank, Brian. Ich bin gerade dabei, ein lokales Mini-Cpan aufzubauen. Dann werde ich unsere lokalen Module + die, die ich benötige, auf bestimmte Versionen herunterstufen.
Matthew Watson
107

bdfoy bietet die beste Lösung in großem Maßstab. Wenn Sie jedoch nur einige Module installieren möchten, können Sie die CPAN-Shell bitten, eine bestimmte Distribution zu installieren, indem Sie auf einen Pfad zu einem Tarball verweisen (relativ zum oberen Rand des CPAN-Baums).

cpan> install MSCHWERN/Test-Simple-0.62.tar.gz

Wenn Sie eine URL zu BackPAN in Ihre URL-Liste einfügen, können Sie jede ältere Version installieren.

cpan> o conf urllist push http://backpan.perl.org/

Dies finden Sie in den häufig gestellten Fragen zu CPAN.pm unter "Wie installiere ich eine 'ENTWICKLERFREIGABE' eines Moduls?"

Schwern
quelle
Nett. Auf diese Weise kann ich ein Kompatibilitätsproblem mit einem Server umgehen, den ich noch nicht aktualisieren kann. Vielen Dank!
Zac Thompson
Ich glaube nicht, dass URL heutzutage funktioniert. Dies tut es jedoch: backpan.perl.org
flammend
install MSCHWERN/Test-Simple-0.62.tar.gz @Schwern Ich denke, Sie müssen das M / MS-Präfix entfernen, um den Tarball zu finden
Tom H
@TomH Beide Stile scheinen zu funktionieren, aber Sie haben Recht, dass Ihr Stil dokumentiert ist und es einfacher ist. Beachten Sie, dass keines von beiden für Test-Simple-0.62.tar.gz funktioniert, es sei denn, Sie verwenden eine BackPAN-URL.
Schwern
@Chloe Fixed it
Schwern
34
cpan install App::cpanminus
cpanm Your::Module@1.23

(Der Karton wird, wie in anderen Antworten angegeben, cpanmunten verwendet, um explizite Versionsanforderungen zu lösen.)

Äther
quelle
Dies ist eine großartige Antwort, um genau zu erfahren, wie " eine bestimmte Version eines Perl-Moduls installiert wird" (wie die Frage an einer Stelle erschien). Vor allem, wenn Sie bereits cpanm verwenden.
Randall
Perfekt: auf debian->aptitude install cpanminus
raiserle
Um den Fehler zu beheben Can't configure the distribution, müssen Sie ausführen sudo apt-get install build-essential. Danke für die Antwort!
Oleg Reym
9

[Es ist fast fünf Jahre später und dies ist eine gut gestellte und gut beantwortete Frage, die viele Ansichten hatte. Da diese Seite in der Google-Suche noch angezeigt werden muss, kann ein Update nicht schaden.]

Cartonist hier erwähnenswert. Cartonist ein relativ neues Werkzeug im gleichen Stil wie App::cpanminus, App::cpanoutdated, perlbrew, et. al. Der Autor (Miyagawa) nennt es "Alpha" -Qualität, aber selbst in seinem aktuellen Zustand vereinfacht der Karton die Wartung mehrerer Umgebungen von versionierten Modulen auf verschiedenen Maschinen.

Pinto Auch ist ein weiteres aktuelles Tool, das für einige der Antworten relevant ist (tatsächlich ist einer der Befragten ein Mitwirkender).

G. Cito
quelle
4

Stratopan.com ist eine weitere Alternative. Stratopan bietet private CPANs in der Cloud. Sie können Ihr Stratopan-Repository mit bestimmten Versionen von Modulen (und deren Abhängigkeiten) füllen und diese dann mithilfe der Standard-Perl-Toolkette installieren. Das Repository ändert sich nur, wenn Sie es ändern möchten, sodass Sie immer die Versionen der gewünschten Module erhalten.

Haftungsausschluss: Ich betreibe Stratopan.

Jeffrey Ryan Thalhammer
quelle
2

Es scheint, dass das Erstellen einer cpanfileListe aller Ihrer Module und gewünschten Versionen (mithilfe der == <version>Syntax zum Sperren für eine bestimmte Version) auch hier hilfreich sein könnte. Das würde bedeuten , die Module zu verwenden Cartonoder cpanmzu installieren.

Dies hätte den Vorteil, dass die Datei schnell und einfach optimiert werden kann, um das Upgrade bestimmter Module in einer Entwicklungs- oder Staging-Umgebung zu testen - etwas, das ein privater CPAN-Spiegel nicht zulässt (ohne mehrere Spiegel zu erstellen).

Randall
quelle