2009-07-19 26 views
4

Existe-t-il un moyen d'utiliser des mini-CPAN spécifiques aux applications (pour garantir des versions de module spécifiques pour différentes applications et faire en sorte que l'installation fonctionne sans accès réseau)? Le mode «standard» de mini-cpan repose sur la définition de «o ur urist» avec une url de fichier dans votre CPAN/Config.pmComment puis-je dire à CPAN.pm d'utiliser un mini-cpan spécifique à l'application?

C'est parfait avec un seul mini-cpan. Cependant, je dois automatiser l'installation d'un CPAN à partir d'un répertoire différent pour chaque application (locale à l'application), car chaque application a des exigences de version différentes.

Ce qui suit près œuvres, mais a alors seulement une coquille de travail partiellement et va chercher encore à partir du Web au lieu d'utiliser la mini-CPAN de $file_url Lieu:

use CPAN; 
use FindBin qw($Bin); 

my $file_url="file:///$Bin/../cpan"; 
CPAN::Shell->o(qw(conf urllist),$file_url); 

CPAN::shell(); 
+3

Pourriez-vous utiliser PAR :: Packer pour empaqueter votre application perl à la place? – Nifle

+0

PAR :: Packer est une solution utile pour la distribution sur le même système d'exploitation, mais ne résout pas le problème de versionnement des copies locales des modules CPAN et d'installation sur un système d'exploitation différent (que j'aurais dû mentionner, désolé). – sidler

Répondre

5

Vous chargez un fichier de configuration différent pour chaque application. La dernière commande cpan dispose d'un commutateur -j pour le faire que:

$ cpan -j some/app/Config.pm -i Foo::Bar 

Cette dernière n'est pas incluse dans la distribution CPAN.pm encore puisqu'il est expérimental. Je l'utilise depuis plusieurs mois, cependant, dans le cadre de mon travail DPAN.

Si cela ne vous convient pas, il vous suffit de fournir le module CPAN::Config spécifique à votre application dans un endroit où Perl le trouvera avant qu'il ne trouve votre version personnelle ou à l'échelle du site. Copiez votre CPAN/Config.pm actuel dans le répertoire de votre module d'application et assurez-vous que le répertoire est premier dans @INC (en utilisant peut-être la variable d'environnement PERL5LIB). CPAN.pm devrait trouver celui-là en premier et l'utiliser. Il utilise seulement le premier qu'il trouve. C'est pratique lorsque la configuration est fixe, même si c'est un peu flexible car vous pouvez exécuter du code dans le module. C'est la configuration en tant que code Perl.

Si cela ne vous convient pas, vous pouvez remplacer CPAN::HandleConfig() dans votre application afin que CPAN.pm ne charge aucun fichier. Vous définissez ensuite les valeurs vous-même. Ceci est particulièrement utile lorsque vous avez beaucoup de logique d'application à résoudre pour comprendre certaines des valeurs de configuration. La configuration de CPAN.pm est juste le hachage %CPAN::Config, il vous suffit donc de définir les bonnes valeurs pour les clés appropriées.

Dans tous les cas, vous voudrez probablement définir la configuration "connect_to_internet_ok" sur une valeur fausse et nettoyer votre "urllist" pour avoir seulement les minicpans locaux.