Je souhaite installer des modules Perl sur un serveur partagé sur lequel je n'ai pas d'accès root. Comment puis-je faire ceci? Ils semblent également avoir une version plus ancienne de CPAN (cela se plaint à ce sujet lors de l'exécution de la commande), est-il possible de mettre à jour la commande CPAN utilisée à partir de mon compte sans avoir besoin d'un accès root?
La méthode la plus simple que j'ai trouvée jusqu'à présent est de dire
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
Cela suppose que votre profil est nommé .profile
, Vous devrez peut-être le changer en .bash_profile
, .bashrc
, Etc. Après cela, vous pouvez installer des modules en disant
cpanm Module::Name
et utilisez-les simplement de la même manière que si elles étaient installées dans les répertoires racine.
Ce qui suit est une brève explication de ce que font les commandes ci-dessus.
wget -O- http://cpanmin.us
Récupère la dernière version de cpanm
et l'imprime dans STDOUT
qui est ensuite redirigée vers Perl - -l ~/Perl5 App::cpanminus local::lib
. Le premier -
Indique à Perl
de s'attendre à ce que le programme arrive sur STDIN
, ce qui fait que Perl
exécute la version de cpanm
nous venons de téléchargé. Perl
passe le reste des arguments à cpanm
. L'argument -l ~/Perl5
Indique à cpanm
où installer les modules Perl, et les deux autres arguments sont deux modules à installer. [App::cpanmins
] 1 est le package qui installe cpanm
. local::lib
est un module d'assistance qui gère les variables d'environnement nécessaires pour exécuter les modules dans le répertoire local.
Une fois ces modules installés, nous exécutons
eval `Perl -I ~/Perl5/lib/Perl5 -Mlocal::lib`
pour définir les variables d'environnement nécessaires pour utiliser les modules locaux, puis
echo 'eval `Perl -I ~/Perl5/lib/Perl5 -Mlocal::lib`' >> ~/.profile
pour nous assurer que nous pourrons les utiliser lors de notre prochaine connexion.
echo 'export MANPATH=$HOME/Perl5/man:$MANPATH' >> ~/.profile
nous espérons que man trouvera les pages de manuel de vos modules locaux.
http://novosial.org/Perl/life-with-cpan/non-root/
L'étape principale dans les deux ensembles d'instructions implique module local :: lib
AFAIK, la logique CPAN est contenue dans le module Perl (CPAN.pm), ce qui signifie que vous pouvez également installer facilement le plus récent dans votre répertoire local comme vous le feriez avec n'importe quel autre module Perl.
De plus, une fois que vous avez installé vos modules dans un emplacement non standard, consultez ces deux questions sur le chargement des bibliothèques à partir d'emplacements non standard (certaines informations sont déjà disponibles dans le lien ci-dessus):
Comment un programme Perl sait-il où trouver le fichier contenant le module Perl qu'il utilise?
Comment est construit @INC de Perl? (aka Quelles sont toutes les façons d'affecter où les modules Perl sont recherchés?)
Pour être complet, il s'agit du processus d'installation de cpanm
sur OSX si vous souhaitez conserver votre Perl5
en dessous de ~/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
Si vous souhaitez également pouvoir lire les pages de manuel des modules installés par cpanminus, vous devez également vous assurer que le sous-répertoire correct du chemin de bibliothèque choisi se trouve dans MANPATH. Ainsi, la solution ci-dessus montrant le processus d'installation de cpanm nécessite la commande supplémentaire suivante:
export MANPATH=$HOME/Library/Perl5/man:$MANPATH' >> ~/.bash_profile