Картину, корзину, картонку

Mar 09, 2018 20:16

Если в целях переносимости хранить перловые модули рядом со своим кодом - будет не очень хорошо. Если при этом ещё и своих собственных модулей наберётся не один десяток (я такой винегрет встречал) - совсем плохо. Вывод - надо разделять.

Один из вариантов - использовать 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

http://shoorick.ru/2018/03/10/carton/

документация, программизм, perl, перевод

Previous post Next post
Up