Ich möchte Perl-Module auf einem gemeinsam genutzten Server installieren, auf dem ich keinen Root-Zugriff habe. Wie kann ich das machen? Sie scheinen auch eine ältere Version von CPAN zu haben (dies wird beim Ausführen des Befehls beanstandet). Ist es möglich, den von meinem Konto verwendeten CPAN-Befehl zu aktualisieren, ohne Root-Zugriff zu benötigen?
80
Antworten:
Die einfachste Methode, die ich bisher gefunden habe, ist zu sagen
wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
Dies setzt voraus , Ihr Profil gestattet
.profile
, die Sie ändern müssen , dass sein.bash_profile
,.bashrc
usw. Danach können Sie Module installieren können sagen ,und verwenden Sie sie einfach so, wie Sie es tun würden, wenn sie in den Stammverzeichnissen installiert wären.
Was folgt, ist eine kurze Erklärung, was die obigen Befehle tun.
wget -O- http://cpanmin.us
holt die neueste Version voncpanm
und druckt sie aus, anSTDOUT
die dann weitergeleitet wirdperl - -l ~/perl5 App::cpanminus local::lib
. Der erste-
sagtperl
, dass das Programm erwartetSTDIN
wird.perl
Dadurch wird diecpanm
gerade heruntergeladene Version ausgeführt .perl
übergibt den Rest der Argumente ancpanm
. Das-l ~/perl5
Argument gibt an,cpanm
wo Perl-Module installiert werden sollen, und die beiden anderen Argumente sind zwei zu installierende Module.[App::cpanmins
] 1 ist das Paket, das installiert wirdcpanm
.local::lib
ist ein Hilfsmodul, das die Umgebungsvariablen verwaltet, die zum Ausführen von Modulen im lokalen Verzeichnis erforderlich sind.Nachdem diese Module installiert sind, laufen wir
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
um die Umgebungsvariablen festzulegen, die für die Verwendung der lokalen Module erforderlich sind, und dann
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
um sicherzustellen, dass wir sie beim nächsten Anmelden verwenden können.
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
wird hoffentlich dazu führen, dass man die Manpages für Ihre lokalen Module findet.
quelle
perl -I ~/perl5/lib/perl5 -Mlocal::lib
oderssh-agent
, die Umgebungsvariablen für einen übergeordneten Prozess festlegen müssen, die Befehle aus, die im übergeordneten Prozess ausgeführt werden müssen, und dann Sieeval
. Sie braucheneval
sie aber nicht wirklich . Man könnte sagenperl -I ~/perl5/lib/perl5 -Mlocal::lib > /tmp/commands; source /tmp/commands
, aber die Eval-Methode ist sauberer (keine Dateien zum Bereinigen oder versehentlichen Überschreiben).http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root
http://novosial.org/perl/life-with-cpan/non-root/
Der Hauptschritt in beiden Befehlssätzen umfasst das Modul local :: lib
AFAIK, CPAN-Logik ist im Perl-Modul (CPAN.pm) enthalten. Dies bedeutet, dass Sie das neuere wie jedes andere Perl-Modul auch problemlos in Ihrem lokalen Verzeichnis installieren können.
Wenn Sie Ihre Module an einem nicht standardmäßigen Speicherort installiert haben, lesen Sie diese beiden Fragen zum Laden von Bibliotheken von nicht standardmäßigen Speicherorten (einige der Informationen sind bereits über den obigen Link verfügbar):
Woher weiß ein Perl-Programm, wo sich die Datei mit dem verwendeten Perl-Modul befindet?
Wie ist Perls @INC aufgebaut? (aka Wie können Sie beeinflussen, wo nach Perl-Modulen gesucht wird?)
quelle
cpan
), dasCPANPLUS
Modul (und sein Befehlszeilenäquivalentcpanp
) und die neu installierte App :: cpanminus-Distributioncpanm
. Von diesen finde ichcpanm
es am einfachsten zu installieren und zu verwenden.cpan
undcpanp
sind standardmäßig installiert, erfordern jedoch ein umfangreiches Setup, um ordnungsgemäß zu funktionieren.Der Vollständigkeit
cpanm
halber ist dies der Installationsprozess von unter OSX, wenn Sie Ihreperl5
unter behalten möchten~/Library
.curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5` echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile
quelle
Wenn Sie auch Manpages für die von cpanminus installierten Module lesen möchten, sollten Sie außerdem sicherstellen, dass sich das richtige Unterverzeichnis des ausgewählten Bibliothekspfads in MANPATH befindet. Die obige Lösung, die den Installationsprozess von cpanm zeigt, benötigt den folgenden zusätzlichen Befehl:
export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile
quelle
Wir haben in den letzten 6 Monaten die folgende Funktion für über 20 erfolgreiche Bereitstellungen von automatisierten Bereitstellungen für aws verwendet, die von der Hauptbereitstellung wie folgt aufgerufen wurden. Dies ist im Grunde nur eine Kopie der obigen Antworten, jedoch in einer einzigen Wiederholung verwendbares Bash-Skript:
#! /usr/bin/env bash │·· │·· # a bash wrapper for check-installing required perl modules as non-root main(){ │·· doSetVars │·· doCheckInstallPreReqs │·· perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t │·· } │·· │·· doSetVars(){ │·· #set -x │·· umask 022 ; │·· set -u -o pipefail │·· run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0") │·· export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../.. │·· } │·· │·· doCheckInstallPreReqs(){ │·· eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │·· perl -e ' │·· use JSON ; │·· use Data::Printer; │·· use Test::Most ; │·· use Test::Mojo; │·· use Data::Printer ; │·· use FindBin; │·· use JSON::Parse ; │·· use IPC::System::Simple ; │·· use Mojolicious ; │·· ' || { │·· curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib │·· eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │·· echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc │·· cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) │·· export PERL_MM_USE_DEFAULT=1 │·· cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \ │·· IPC::System::Simple │·· sudo curl -L cpanmin.us | perl - Mojolicious │·· } │·· │·· } │·· │·· main
quelle