#perl #cpan
#perl #cpan
Вопрос:
Вчера я хотел протестировать некоторое программное обеспечение, и в документации говорилось, что для установки мне просто нужно было ввести
cpan -i Software
Я никогда не использовал cpan, я просто знаю, что это менеджер пакетов perl. (Это ..?) Однако оказалось, что мне нужно множество зависимостей, и, каким бы глупым я ни был, я просто установил их все. (Сначала мне пришлось настроить cpan, который задал мне много вопросов) Короче говоря, я просто хочу удалить все это снова. Я немного погуглил, и похоже, что cpan не имеет процедуры удаления, особенно для всех пакетов сразу.
Могу ли я просто удалить какой-либо каталог или у меня возникнут проблемы?
Ответ №1:
cpan
команда на самом деле не является менеджером пакетов, как apt-get
is. Это скорее инструмент, который загружается и устанавливается с CPAN (сайта или одного из его зеркал). После завершения этой задачи он мало что помнит о том, что было сделано раньше, по крайней мере, недостаточно для удаления ранее установленных модулей, по крайней мере, ненадежно, чисто или безопасно для зависимостей. (Обновление: после просмотра App::pmuninstall
его можно использовать для обработки зависимостей, но он делает это путем подключения к внешним (читай: веб) источникам, которые вычисляют их отдельно, что нормально, но я придерживаюсь предыдущего утверждения, что CPAN.pm не делает этого.)
Раньше я беспокоился об удалении модулей, но теперь я понимаю, что большинство модулей Perl занимают так мало места, что я просто не беспокоюсь о том, чтобы установить несколько дополнительных модулей, которые вы никогда не будете использовать. Поэтому, если вы не используете компьютер с ДЕЙСТВИТЕЛЬНО маленьким диском, я бы просто оставил это в покое.
В Windows или, если вы используете несистемный Perl в Linux / Mac, вы можете просто удалить Perl и переустановить его. Я бы не рекомендовал этого, если вы используете Perl, установленный в системе, на Linux / Mac, однако, поскольку вы можете сломать свою ОС, делая это (возможно, все будет в порядке, если вы будете осторожны, но не стоит экономить несколько Мб!).
В будущем вы можете легко установить локальную версию Perl с помощью perlbrew, в Интернете есть учебные пособия, если документов недостаточно (они должны быть). Это также дает бонус, позволяющий вам играть с новейшими и лучшими версиями Perl, которые, вероятно, еще не поставляются с вашей системой. Затем, если вы устанавливаете гору мусора или даже ломаете его, делая что-то сумасшедшее, удалите эту версию и переустановите / установите другую версию.
Другим приятным инструментом является cpanminus (или сокращенно cpanm), который является более новым и удобным для пользователя инструментом cpan. Все крутые ребята используют его.
Комментарии:
1. Спасибо за хорошее объяснение. Я немного углубился в каталоги библиотек и решил сохранить все эти файлы, как вы предложили.
2. @xenoterracide зависит ли это от использования cpanm для установки? беглый взгляд на документ, казалось, предполагал это. в любом случае, я не вижу необходимости удалять практически любой из модулей CPAN, по крайней мере, с точки зрения хранения данных. Тем не менее, приятно знать, что что-то существует
3. нет,
cpanm
afaik ничего не делает, кроме как записывать этоcpan
иcpanp
делать.4. круто 1! Я замечаю, что он отправляется в Интернет для поиска зависимостей, но, учитывая ограничения, которые CPAN.pm черт возьми, я рад, что они что-то придумали, а не игнорировали их!
5. Я просто смотрел на это и думал, что одна из причин удаления модулей заключается в том, что когда вы разрабатываете один из них, вы удаляете один из его модулей в выпуске разработчика, но он все еще установлен и, следовательно, находится в вашей библиотеке. Удаление его — лучшая идея.
Ответ №2:
Вы можете удалить отдельные модули с помощью cpanplus (поставляется с Perl) следующим образом:
cpanp uninstall SQL::Abstract
Вы можете просмотреть все модули, установленные с помощью скрипта cpan, следующим образом:
perldoc perllocal
Объединение двух:
for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<(.*)|.*>$/1/') ; do
cpanp uninstall "$module"
done
Комментарии:
1. Я предполагаю, что строка 2 скрипта должна быть
cpanm --uninstall "$module"
2. или
cpan uninstall "$module"
Ответ №3:
Я не уверен в удалении «всего этого». Но для удаления одного модуля вы можете использовать App::pmuninstall
его единственный скрипт pm-uninstall
для удаления модулей. Возможно, тогда вы сможете написать какой-нибудь скрипт для рекурсивного удаления dep.
Ответ №4:
Если вы больше не можете использовать cpan из-за несовместимых модулей в вашем пути, вы можете удалить все установленные модули вручную. Например, я обновился с Fedora 22 до Fedora 23, и версия Perl изменилась. Все модули, установленные ранее через cpanm into /usr/local/lib64/perl5
, больше не работали и не позволяли мне использовать cpanm.
$ cpanm --uninstall Apache::DBI
Attempt to reload Scalar/Util.pm aborted.
Compilation failed in require at /usr/share/perl5/vendor_perl/File/Temp.pm line 18.
...
Я мог бы решить эту проблему, переместив этот каталог:
$ mv /usr/local/lib64/perl5 /root/usr-local-lib64-perl5
Имя этого каталога может отличаться в вашей системе.
Осторожно: если модуль установил файлы за пределами этого каталога, например файлы системной библиотеки, эти файлы останутся там.
Ответ №5:
Я изменю ответ Flimm на использование cpanm и, при необходимости, удалю сам cpanm в конце скрипта:
#!/usr/bin/env bash
for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<(.*)|.*>$/1/' | sort | uniq) ; do
if [[ "$module" =~ "App::cpanminus" ]]; then
continue
fi
echo "Uninstalling $module..."
yes | cpanm --uninstall "$module"
done
cpanm --uninstall App::cpanminus
Ответ №6:
Я думаю, что лучший вариант — удалить Perl и установить его снова.
Комментарии:
1. Единственная проблема с этим предложением заключается в том, что вам НЕ следует этого делать, если вы используете общесистемную установку на Linux / Mac. Если вы используете Windows, то это, вероятно, предпочтительнее.