Если в целях переносимости хранить перловые модули рядом со своим кодом — будет не очень хорошо. Если при этом ещё и своих собственных модулей наберётся не один десяток (я такой винегрет встречал) — совсем плохо. Вывод — надо разделять.
Один из вариантов — использовать carton. Для тех, кому лень читать по-английски, есть перевод — статья Вячеслава Тихановского «Локальная установка и использование Perl-модулей» из журнала Pragmatic Perl за 2014 год.
Carton берёт список модулей, ставит их локально (root не нужен) вместе с зависимостями и позволяет запускать приложения с таким вот набором модулей. Список используемых модулей (если carton ещё ничего не ставил) можно достать из скриптов и своих модулей:
find . -type f -name \*p\[lm\] -exec egrep -n '^use ' '{}' ';' \
| cut -d' ' -f 2 | sort -u
Чтоб указать необходимость установки какого-нибудь Module::Name
, достаточно добавить в файл cpanfile
строку
requires 'Module::Name';
Carton умеет ставить нужные версии модулей, однако в документации этот момент вскользь упомянут, но не описан должным образом. Если захотеть, например, поставить старую версию модуля Sphinx::Search (это потребуется, если сам Сфинкс не новый) и написать
requires 'Sphinx::Search', '0.28';
то вместо желаемой версии будет установлена свежая (0.31 по состоянию на март 2018) — похоже, такая запись указывает минимально допустимую версию. Если поменять код на
requires 'Sphinx::Search', '== 0.28';
и снова выполнить carton install
, версия поменяется
Installing modules using /home/.../cpanfile Successfully installed Sphinx-Search-0.28 (downgraded from 0.31) 1 distribution installed
Команда carton exec
может пригодиться для запуска не только самого́ приложения, но и чего-нибудь ещё:
carton exec prove -l
Картину, корзину, картонку: 1 комментарий
Вы должны авторизоваться чтобы опубликовать комментарий.