web-dev-qa-db-fra.com

Comment puis-je installer des modules Perl sans privilèges root?

Je suis sur une machine Linux sur laquelle je n'ai pas de privilèges root. Je souhaite installer des packages via CPAN dans mon répertoire personnel afin que, lorsque je lance Perl, il puisse le voir.

J'ai lancé cpan, qui demandait des options de coniguration. Il a demandé un répertoire, qu'il a suggéré ~/Perl "pour les utilisateurs non root". Néanmoins, lorsque j'essaye d'installer un paquet, il échoue à l'étape make install, car je n'ai pas d'accès en écriture à /usr/lib/Perl5/whatever.

Comment configurer CPAN pour pouvoir installer des packages dans mon répertoire personnel?

36
petersohn

Il existe un moyen documenté dans perlfaq8 , qui correspond à ce que local :: lib fait pour vous.

C'est aussi une question fréquemment posée par StackOverflow:

Curiosuly, rien de tout cela n’est suggéré lorsque j’utilise le titre de votre question initiale (c’est une des raisons pour lesquelles un bon titre est très important pour trouver votre réponse).


Comment garder mon propre répertoire module/library?

Lorsque vous construisez des modules, indiquez à Perl où installer les modules.

Si vous souhaitez installer des modules pour votre propre usage, le moyen le plus simple peut être local :: lib, que vous pouvez télécharger à partir de CPAN. Il définit divers paramètres d'installation pour vous et utilise ces mêmes paramètres dans vos programmes.

Si vous voulez plus de flexibilité, vous devez configurer votre client CPAN pour votre situation particulière.

Pour les distributions basées sur Makefile.PL, utilisez l'option INSTALL_BASE lors de la génération de Makefiles:

Perl Makefile.PL INSTALL_BASE=/mydir/Perl

Vous pouvez définir ceci dans votre configuration CPAN.pm afin que les modules s’installent automatiquement dans votre répertoire de bibliothèques privées lorsque vous utilisez le shell CPAN.pm:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/Perl
cpan> o conf commit

Pour les distributions basées sur Build.PL, utilisez l'option --install_base:

Perl Build.PL --install_base /mydir/Perl

Vous pouvez configurer CPAN.pm pour utiliser automatiquement cette option également:

% cpan
cpan> o conf mbuild_arg "--install_base /mydir/Perl"
cpan> o conf commit

INSTALL_BASE indique à ces outils de placer vos modules dans/mydir/Perl/lib/Perl5. Voir Comment ajouter un répertoire à mon chemin d'inclusion (@INC) au moment de l'exécution? pour plus de détails sur la manière d’exécuter vos modules nouvellement installés.

Il y a cependant un inconvénient avec INSTALL_BASE, car il agit différemment des paramètres PREFIX et LIB préconisés par les anciennes versions d'ExtUtils :: MakeMaker. INSTALL_BASE ne prend pas en charge l'installation de modules pour plusieurs versions de Perl ou des architectures différentes dans le même répertoire. Vous devez envisager si vous le souhaitez vraiment et si vous le souhaitez, utilisez les anciens paramètres PREFIX et LIB. Voir la documentation ExtUtils :: Makemaker pour plus de détails.

25
brian d foy