CPAN vs. APT: Konflikte in Versionen?

9

Ich kann die Antwort darauf nirgendwo finden: Widerspricht ein über APT installiertes Modul einem über CPAN installierten Modul?

Zusammen mit dieser Frage sind dies: Wo leben die installierten CPAN-Module? Sind sie global oder nur für den installierenden Benutzer zugänglich? Woher weißt du welche? Woher wissen Sie, was installiert ist und was Vorrang hat?

Sollte CPAN überhaupt verwendet werden, wenn Module über APT installiert werden?

Mei
quelle

Antworten:

8

Unter Debian und Ubuntu /usr/bin/cpaninstalliert CPAN ( Dienstprogramm) /usr/local/lib/standardmäßig Module in . Und Debian-Pakete behalten ihre Dateien in /usr/share/perl5/und /usr/lib/perl5/. So installierten Dateien über /usr/bin/cpannicht überschrieben Dateien via apt installiert.

Es ist nichts Falsches an der Verwendung von System Perl, und das Mischen von Apt- und Cpan-Code funktioniert im Allgemeinen.

Sie können auch festlegen, dass alle in Ihren apt-Repositorys nicht verfügbaren cpan-Distributionen manuell verpackt werden. Mit dem Dh-Make-Perl-Tool ist das ganz einfach:

dh-make-perl --cpan Some::Module && cd Some-Module* && sudo debi
berekuk
quelle
Der Ort, an dem cpaninstallierte Module landen, wird von PERLs bestimmt Config.pm. Auf meinem Ubuntu 11.04 ist es /usr/local/share/perl/5.10.1.
Riccardo Murri
Ich denke, es ist /usr/local/sharefür reine Perl-Module und /usr/local/libfür XS-Sachen.
berekuk
6

Ich benutze Perlbrew . Es installiert eine lokale Version von Perl und cpan. Alles, was es tut, wird in Ihrem Home-Verzeichnis erledigt. Die Installation und Verwendung ist unkompliziert und Sie können die neueste Version von Perl installieren.

shawnhcorey
quelle
2
Das ist auch gut, wenn Sie vom System-Perl abweichen möchten.
Szabgab
4

Bei der direkten Installation von CPAN würde ich empfehlen, local :: lib in einem für Sie privaten Verzeichnis zu verwenden. Siehe die Boostrapping-Technik https://metacpan.org/module/local::lib

Auf diese Weise wird das installierte CPAN-Modul nur von Ihrem Benutzer verwendet und es wird eine sehr saubere Trennung von den mit APT installierten Modulen erzielt.

Es macht es auch einfach, die von CPAN installierten Module zu entfernen, wenn Sie auf ein Problem stoßen oder wenn Sie Ubuntu aktualisieren.

So benutze ich es unter Ubuntu.

szabgab
quelle
1

Sie können beide verwenden, aber sie werden in Konflikt geraten. Sie sind an derselben Stelle geschrieben. Wenn Sie also etwas von apt installieren und dann eine spätere Version von cpan installieren, können Sie die Dinge ausweichen.

Ich mache nicht viel Perl, aber in Python habe ich sicherlich das Dilemma, von dem Sie sprechen: apt-vs-PyPI. Ich persönlich entscheide mich für apt, wann immer ich kann. Es bedeutet, dass ich Updates erhalten sollte, ohne daran denken zu müssen, jedes einzelne Python-Paket zu warten. Darüber hinaus sollten alle meine Systeme auf derselben Version dieser Pakete ausgeführt werden.

Es klappt nicht immer. Manchmal haben Sie nicht genug neue Dinge in den Repos oder etwas, das Sie brauchen, ist einfach nicht verpackt. Keiner der Wege ist perfekt, aber ich glaube, dass er perfekter ist. Sei dir nur bewusst, was du tust und du solltest in Ordnung sein.


Bearbeiten - Fast vergessen, es gibt eine bessere Möglichkeit, Dinge zu unterteilen, damit das System eine eigene Umgebung haben kann und alles, was Sie entwickeln, in einer eigenen Umgebung leben kann (die Sie vollständig mit CPAN verwalten), wie Pythons virtualenv...

/programming/1423879/how-can-i-install-specialized-environments-for-different-perl-applications

Oli
quelle
Ich hatte gehofft, dass CPAN in einem Siteoder einem siteVerzeichnis installiert wird - oder dass Sie es zumindest erzwingen können.
Mei
3
Hinweis: Unter Ubuntu cpanlanden installierte Module in / usr / local / share / perl (oder dem von PERL angegebenen Speicherort Config.pm), während APT-Pakete gemäß Debian-Richtlinie in / usr / share / perl5 landen. Sie stehen also nicht in Konflikt, und es ist sicher, CPAN- und APT-Installationen zu kombinieren, wie die anderen Antworten sagen. (Python ist hier keine gute Analogie: PERL-Verpackung und Modulhandhabung sind sehr unterschiedlich und -IMHO- Python überlegen.)
Riccardo Murri
@ Riccardo: ganz richtig. Gleiches gilt auch für Red Hat, allerdings an einem anderen Ort.
Mei