Za pomocą perlbrew można użyć polecenia lib
, aby utworzyć local::lib
, aby przejść do perlbijskiego perla.
perlbrew lib create [email protected]_reqs
Następnie, jeśli wszystko pójdzie dobrze, po zainstalowaniu modułów będzie je znaleźć w:
$HOME/.perlbrew/libs/[email protected]_reqs
Jeśli nie używać podejścia perbrew lib create
do zarządzania modułami, a następnie są one zainstalowane na $HOME/perl5/perlbrew/perls/perl-5.20.1/lib/site_perl/5.20.2
. Klonowanie któregoś z tych katalogów może działać, ale prawdopodobnie lepiej będzie ponownie zainstalować wszystkie moduły, korzystając z technik z perlbrew.pl website, ponieważ moduły XS powinny zostać przebudowane itd..
Jeśli chcesz ponownie wykorzystać i śledzić źródła lokalne, najbardziej niezawodnym rozwiązaniem jest utworzenie lokalnego lustra CPAN do pracy z wykorzystaniem App::lcpan
lub minicpan
. Jeśli już pobrać źródła przy użyciu cpanm
szybkie hackish podejście jest znalezienie plików źródłowych (pod $HOME/.cpanm/
) i zrobić coś takiego w swojej powłoce:
% mkdir ~/cpansourcefiles
% for source in ~/.cpanm/work/*/* ; do cp $source ~/cpansourcefiles ;done
Następnie można dostać cpanm
zainstalować przy użyciu tych źródeł przez przekazując nazwę pliku jako argument zamiast nazwy modułu:
% cpanm ~/cpansourcefiles/List-MoreUtils-0.406.tar.gz
lub nawet:
% cpanm ~/cpansourcefiles/*
NB: YMMV, ponieważ jest to podatne na złamanie i może pomijać niektóre wersje i sprawdzanie zależności, które zwykle uzyskuje się z cpanm
, ale jest prostsze niż konfiguracja lustra, gdy działa.
Kilka innych wysokich narzędzia zasilane które sprawiają, że wdrażanie aplikacji Perl wytrzymałe i niezawodne:
EDIT:
Narzędzia takie jak perlbrew
, pinto
, i cpanm
są ogromnym ulepszeniem w porównaniu do zbieranego osobiście zbioru skryptów do robienia podobnych rzeczy. Dziękujemy wszystkim programistom i współautorom tych narzędzi!
nie jestem świadomy żadnej funkcji w cpanm
lub perlbrew
które pozwalają niezawodnie produkować listę zainstalowanych plików i ich wersje. Coś jak:
cpanm --list_installed
perlbrew list_installed_versions
czyli
cpanm --export-cpanfile
perlbrew list_installed_as_cpanfile
może być pożądaną cechą.
Jak zauważyłem w komentarzu do powyższego OP, można zebrać przydatne informacje o instalacji modułu z plików install.json
, które są instalowane przez cpanm
. Moduły takie jak CPAN::Meta
, Module::Metadata
i Distribution::Metadata
również mogą być pomocne.
Sugestia używać find
i jq
(który był z @Ilmari Karonen zobaczyć Upgrade all modules installed by local::lib w this answer) doprowadziły do szybkiego niedokończonej siekać poniżej. Jednym z wyzwań/kwestią jest tam czasami install.json
pliki lewej leżące wokół w wielu miejscach:
lib/perl5/$Config{archname}/.meta/Whatever-Mod-1.0050000/install.json
lib/perl5/$Config{archname}/.meta/Whatever-Mod-1.0090000/install.json
- ... itp
Jest to prawdopodobnie dlatego, że te pliki są nie zawsze czysto usuwane podczas aktualizacji, ponownej instalacji lub innego muckingu na temat błędów PEBKAC. Aby działał poprawnie, poniższy kod powinien zostać zmieniony, aby zauważył, że istnieje wiele kombinacji nazw i wersji modułu install.json
, a następnie dokładniej sprawdza, czy moduł jest zainstalowany i otrzymuje jego wersję. Skrypt powinien mieć opcje: $dir
może pochodzić od @ARGV
. TIMTOWTDI, "well volunteered", itd..
#!perl
# list_installed_mods.pl
# DOES NOT THOROUGHLY VERIFY CURRENT VERSION
use File::Find;
use JSON;
use v5.16;
my $dir = "$ENV{HOME}/perl5/lib/perl5";
for my $installed (find_installed($dir)) {
say parse_install_json($installed);
}
sub find_installed {
my $libdir = shift;
my @files;
File::Find::find ({ wanted =>
sub { push @files, $File::Find::name if /install\.json/i} },
$libdir);
return @files;
}
sub parse_install_json {
my $filename = shift;
my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename)
or die("Can't open \$filename\": $!\n");
local $/;
<$json_fh>
};
my $install = decode_json($json_text) ;
return ($install->{name} ,"\@", $install->{version}) ;
}
Można zastosować podejście opisane w [Jak ponownie zainstalować wszystkie moduły na nowym perlu] (http://perlbrew.pl/Reinstall-All-Modules-On-New-Perl.html), ale wpisz dane wyjściowe z ' perlbrew list-modules' do pliku, skopiuj plik na inny komputer i używaj go jako wejścia dla 'perlbrew exec'. Jednak wymagałoby to dwukrotnego pobrania całego zestawu modułów, a otrzymasz najnowszą wersję wszystkiego, więc możesz mieć niedopasowania wersji między dwiema instalacjami. – ThisSuitIsBlackNot
@ThisSuitIsBlackNot ++ Z 'cpanm' możesz używać wersji - jak w' cpanm Plack @ 0.9990', ale nie ma opcji, aby uzyskać aktualną listę wersji z '' perlbrew list-modules'. Jednym ze sposobów uzyskania całkiem dobrej listy aktualnych wersji modułów zainstalowanych pod - powiedzmy - '~/perl5 /' jest poszukiwanie plików 'install.json' i ich przetwarzanie. * np. * 'find ~/perl5/-name install.json -exec jq -M '.name +" @ "+ .version' {} +'. Zakłada się, że istnieje plik 'install.json'. Poprawia format wyjściowy tak, aby 'perlbrew exec cpanm' podobało się prawdopodobnie –