web-dev-qa-db-fra.com

Comment puis-je utiliser CPAN en tant qu'utilisateur non root?

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?

74
Juan A. Navarro

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.

130
Chas. Owens

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/

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?)

11
DVK

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
5
Juan A. Navarro

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
2
Britton Kerin