В perlbrew вы можете использовать команду lib
, чтобы создать local::lib
, который будет работать с вашим perlbrew perl.
perlbrew lib create perl-5.20.2@app_reqs
Затем, если все пойдет хорошо, при установке модулей вы найдете их в:
$HOME/.perlbrew/libs/perl-5.20.2@app_reqs
Если вы не используете perbrew lib create
подход к управлению своими модулями, они устанавливаются в $HOME/perl5/perlbrew/perls/perl-5.20.1/lib/site_perl/5.20.2
. Клонирование любого из этих каталогов может сработать, но вам, вероятно, лучше переустановить все модули, используя методы из веб-сайт perlbrew.pl, так как модули XS должны быть перестроены и т. д..
Если вы хотите повторно использовать и отслеживать локальные источники, наиболее надежным подходом является создание локального зеркала CPAN для работы с использованием App::lcpan
или minicpan
. Если вы уже загрузили исходный код с помощью cpanm
, быстрый хакерский подход состоит в том, чтобы найти исходные файлы (под $HOME/.cpanm/
) и сделать что-то вроде этого в вашей оболочке:
% mkdir ~/cpansourcefiles
% for source in ~/.cpanm/work/*/* ; do cp $source ~/cpansourcefiles ;done
Затем вы можете получить cpanm
для установки с использованием этих источников, передав имя файла в качестве аргумента вместо имени модуля:
% cpanm ~/cpansourcefiles/List-MoreUtils-0.406.tar.gz
или даже:
% cpanm ~/cpansourcefiles/*
NB: YMMV, так как это может привести к поломке и может пропустить часть проверки версий и зависимостей, которую вы обычно выполняете с cpanm
, но это проще, чем настроить зеркало, когда оно работает.
Несколько других мощных инструментов, которые делают развертывание Perl-приложений надежным и надежным:
ИЗМЕНИТЬ:
Такие инструменты, как perlbrew
, pinto
, carton
и cpanm
, представляют собой значительное улучшение по сравнению с разношерстной личной коллекцией скриптов для выполнения подобных задач. Спасибо всем разработчикам и участникам этих инструментов!
Мне неизвестны какие-либо функции в cpanm
или perlbrew
, которые позволяют надежно составить список установленных файлов и их версии. Что-то типа:
cpanm --list_installed
perlbrew list_installed_versions
or:
cpanm --export-cpanfile
perlbrew list_installed_as_cpanfile
может быть долгожданной функцией.
Как я отметил в комментарии к OP выше, вы можете получить полезную информацию об установке вашего модуля из файлов install.json
, установленных cpanm
. Такие модули, как CPAN::Meta
, Module::Metadata
и Distribution::Metadata
тоже может быть полезно.
Предложение использовать find
и jq
(от @Ilmari Karonen см. Upgrade все модули, установленные local::lib в этом ответе), привели к быстрому незавершенному взлому ниже. Одна из проблем/проблем заключается в том, что иногда в разных местах остается install.json
файлов:
lib/perl5/$Config{archname}/.meta/Whatever-Mod-1.0050000/install.json
lib/perl5/$Config{archname}/.meta/Whatever-Mod-1.0090000/install.json
- ... и т. д.
Вероятно, это связано с тем, что эти файлы не всегда удаляются начисто при обновлении, переустановке или других манипуляциях с ошибками PEBKAC. Для правильной работы приведенный ниже код должен быть изменен таким образом, чтобы он замечал наличие нескольких комбинаций имени и версии модуля install.json
, а затем выполнял более тщательную проверку того, установлен ли модуль и получает свою версию. В скрипте должны быть опции: $dir
может исходить из @ARGV
. TIMTOWTDI, "доброжелательная работа", и т. д..
#!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} ) ;
}
person
G. Cito
schedule
12.03.2015
perlbrew list-modules
в файл, скопируйте файл на другую машину и используйте его в качестве ввода дляperlbrew exec
. Однако для этого потребуется дважды загрузить весь набор модулей, и вы получите последнюю версию всего, поэтому у вас могут быть несоответствия версий между двумя вашими установками. - person ThisSuitIsBlackNot   schedule 12.03.2015cpanm
вы можете использовать версии - как вcpanm [email protected]
, но нет возможности получить текущий список версий с'perlbrew list-modules
. Один из способов получить довольно хороший список текущих версий модулей, установленных, скажем, под~/perl5/
, состоит в том, чтобы искать любые файлыinstall.json
и обрабатывать их. например,find ~/perl5/ -name install.json -exec jq -M '.name + "@" + .version' {} +
. Это предполагает, чтоinstall.json
существует. Вероятно, потребуется настроить формат вывода, который так нравитсяperlbrew exec cpanm
. - person G. Cito   schedule 12.03.2015