2010-10-22 4 views
5

J'ai récemment mis en place un nouveau système et je voulais installer Padre pour le vérifier. Les instructions d'installation de Padre ont spécifiquement dit d'installer local :: lib, donc je l'ai fait (bien que je n'en aie jamais eu besoin auparavant). J'ai ensuite continué mon chemin en installant plusieurs autres modules, en exécutant CPAN à partir de mon compte utilisateur normal avec sudo pour gérer les parties de l'installation requises par la racine. Puis il est temps de tester l'une des applications Web dont ces modules ont besoin pour prendre en charge et, voilà, apache ne peut pas les trouver. Ils ont chargé fin de la ligne de commande et un rapide coup d'oeil à ~/perl5 confirmé mes soupçons que :: lib local avait pris en otage mes sessions CPAN et installé ces modules là au lieu d'un emplacement du site à l'échelle, malgré ma config CPAN y comprisComment installer un module CPAN à l'échelle du site alors que local :: lib est présent?

makepl_arg   [INSTALLDIRS=site] 
mbuildpl_arg  [--installdirs site] 

Que dois-je faire pour ma configuration CPAN afin que les modules soient installés à l'échelle du site même si local :: lib est installé? Ou Padre travaillera-t-il sans cela et je peux simplement supprimer local :: lib entièrement?

(je ne pas veulent des modules installés sous ~/perl5 à moins que Padre insiste sur eux d'être là. Mon code en cours de développement a et tout le reste de ses propres emplacements de répertoire spécifiques au projet devrait être l'ensemble du site. Je ne besoin d'un emplacement fourre-tout privé.)

+1

Que signifie «quel perl»?S'il ne s'agit pas de '/ usr/bin/perl', vous pouvez simplement appeler'/usr/bin/perl -MCPAN -e shell'. –

+0

Bonne idée, mais elle montre '/ usr/bin/perl'. –

Répondre

8

Vous l'avez. Selon les instructions sur local::lib's CPAN page, j'avais défini export PERL_MM_OPT='INSTALL_BASE=~me/perl', qui remplaçait le paramètre dans ma configuration CPAN. Un rapide export PERL_MM_OPT= m'a ramené à un emplacement d'installation approprié.

D'une part, c'est ce que je reçois pour suivre aveuglément les instructions. D'autre part, je m'attendais à o conf pour montrer les paramètres de configuration utilisés plutôt que ceux qui sont dans la configuration CPAN enregistrée (même si une variable d'environnement les remplace).

+1

C'est pourquoi je pense que local :: lib, perlbrew, etc, bien que techniquement bon, sont socialement mauvais. C'est censé rendre les choses plus faciles pour les gens qui comprennent déjà le processus, ne le font pas pour que vous puissiez ignorer ce qu'il fait pour vous. –

+1

* long silence * convenu, j'ai fini par arracher mes cheveux sur un problème de serveur avec des modules ne pas mettre à jour correctement pour un utilisateur, a découvert que c'était parce que le compte avait local :: lib et les modules étaient mis à jour. Maintenant, je suis condamné à environ 4 ans (la durée qu'il m'a fallu pour répondre à ce poste) de remettre mes cheveux dans leurs follicules appropriés. – osirisgothra

0

Basé sur this comment, il semble que local::lib installe sa propre version de CPAN.pm. Si c'est le cas, vous devrez peut-être trouver l'original CPAN.pm et assurez-vous que celui-ci est chargé lorsque vous exécutez votre shell CPAN. Quelque chose comme:

perl -I /usr/lib/perl5 -MCPAN -e shell 

pourrait le faire. Vous pouvez également trouver perl -V utile pour voir quel chemin d'accès le compilateur Perl utilise pour ses modules.

+0

Non, les modules sont toujours installés sous '//perl5' même avec' -I/usr/lib/perl5' et tous les répertoires sous '//perl5' sont supprimés de @INC. –

+0

OK, cela vous indiquera quel module CPAN.pm est en cours de chargement: 'perl -MCPAN -le 'print $ INC {" CPAN.pm "}'' Qu'est-ce qu'il imprime? – Tim

+0

'/ usr/share/perl/5.10/CPAN.pm' –

1

Une exportation rapide PERL_MM_OPT = m'a ramené à un emplacement d'installation approprié.

Cela ne m'a pas aidé quand j'ai essayé d'installer Starman globalement. Je devais modifier /root/.bashrc commenter (ou supprimer) lignes suivantes:

  1. export PERL_LOCAL_LIB_ROOT = "PERL_LOCAL_LIB_ROOT de $:/root/perl5";
  2. export PERL_MB_OPT = "- base_installation/racine/perl5";
  3. export PERL_MM_OPT = "INSTALL_BASE =/racine/perl5";
  4. export PERL5LIB = "/ racine/perl5/lib/perl5: $ PERL5LIB";
  5. export CHEMIN = "/ root/perl5/bin: $ PATH";
Questions connexes