Удалите все модули perl, установленные cpan
Вчера мне захотелось протестировать какое-то программное обеспечение и в документации, о которой говорилось, для установки мне просто нужно было ввести
cpan -i Software
Я никогда не использовал cpan, я просто знаю, что это менеджер пакетов perl. (Является ли это??) Однако оказалось, что мне нужны нагрузки зависимостей и глупы, как и я, я только что установил их все. (Во-первых, мне пришлось настроить cpan, который задал мне много вопросов). Короче говоря, я просто хочу снова удалить все это. Я немного искал googled, и похоже, что у cpan нет процедуры удаления, особенно для всех пакетов одновременно.
Могу ли я просто удалить какую-либо директорию или у меня возникнут проблемы?
Ответы
Ответ 1
команда cpan
на самом деле не такая менеджер пакетов, как apt-get
. Это больше инструмент, который загружает и устанавливает из CPAN (сайта или одного из его зеркал). После того, как он завершил эту задачу, он не очень много помнит о том, что было сделано раньше, по крайней мере, недостаточно, чтобы удалить ранее установленные модули, по крайней мере, не надежно, чисто или безопасно. (Обновление:). После просмотра App::pmuninstall
его можно использовать для обработки зависимостей, но он делает это, подключаясь к внешней (читайте: web), которые вычисляют их отдельно, что хорошо, но я согласен с предыдущим утверждением, что CPAN.pm этого не делает.)
Раньше я беспокоился об удалении модулей, но теперь я понимаю, что большинство модулей Perl занимают настолько мало места, что я просто не беспокоюсь о том, чтобы установить несколько дополнительных модулей, которые вы никогда не будете использовать. Поэтому, если вы не находитесь на компьютере с ДЕЙСТВИТЕЛЬНО маленьким диском, я бы просто позволил ему быть.
В Windows или если вы используете не-системный Perl на Linux/Mac, вы можете просто удалить Perl и переустановить его. Я бы не рекомендовал этого, если вы используете установленную системой Perl на Linux/Mac, но, как вы могли бы сломать вашу ОС, это можно было бы (если вы были осторожны, но не стоило бы сэкономить несколько Mb!).
В будущем вы можете легко установить локальную версию Perl с помощью perlbrew, есть урок по всей сети, если документы недостаточно ( они должны быть). У этого также есть бонус, позволяющий вам играть с новейшими и самыми большими версиями Perl, которые, по всей видимости, у вашей системы еще не появились. Тогда, если вы установите гору мусора или даже сломаете его, сделав что-то сумасшедшее, удалите эту версию и переустановите/установите другую версию.
Другим приятным инструментом является cpanminus (или cpanm для краткости), который является более новым, более удобным для пользователя инструментом cpan. Все классные дети используют его.
Ответ 2
Вы можете удалить отдельные модули с помощью cpanplus (поставляется с Perl) следующим образом:
cpanp uninstall SQL::Abstract
Вы можете просмотреть все модули, установленные с помощью cpan script следующим образом:
perldoc perllocal
Сочетание двух:
for module in $(perldoc -u perllocal | grep -F 'C<Module> L<' | sed 's/^.*L<\(.*\)|.*>$/\1/') ; do
cpanp uninstall "$module"
done
Ответ 3
Я не уверен в том, чтобы удалить "все это". Но для удаления одного модуля вы можете использовать App::pmuninstall
с его единственным script pm-uninstall
для удаления модулей. Затем вы можете написать какой-то script, чтобы рекурсивно удалить депо.
Ответ 4
Если вы больше не можете использовать cpan, потому что в вашем пути есть несовместимые модули, вы можете удалить все установленные модули вручную. Например, я обновил Fedora 22 до Fedora 23, а версия Perl изменилась. Все модули, установленные ранее через cpanm в /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
Я думаю, что лучшим вариантом является удаление Perl и установка его снова.
Ответ 6
Я расширю ответ Flimm, чтобы дополнительно удалить сам 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