Удалите все модули Perl, установленные cpan - PullRequest
21 голосов
/ 15 октября 2011

Вчера я хотел протестировать некоторое программное обеспечение и в документации сказано, что для установки мне просто нужно было набрать

cpan -i Software

Я никогда не использовал cpan, я просто знаю, что это менеджер пакетов perl. (Это ..?) Однако оказалось, что мне нужно множество зависимостей, и, как я ни глуп, я просто установил их все. (Сначала я должен был настроить cpan, который задавал мне много вопросов) Короче говоря, я просто хочу удалить все это снова. Я немного погуглил, и кажется, что у cpan нет процедуры удаления, особенно для всех пакетов одновременно. Могу ли я просто удалить какой-нибудь каталог или у меня возникнут проблемы?

Ответы [ 6 ]

28 голосов
/ 15 октября 2011

команда cpan на самом деле не менеджер пакетов, как apt-get.Это скорее инструмент, который загружает и устанавливает из CPAN (сайт или одно из его зеркал).После выполнения этой задачи он мало что помнит о том, что было сделано ранее, по крайней мере, недостаточно для удаления ранее установленных модулей, по крайней мере не надежно, чисто или безопасно для зависимостей.( Обновление: После просмотра App::pmuninstall его можно использовать для обработки зависимостей, но это происходит путем подключения к внешним (читай: веб) источникам, которые вычисляют их отдельно,это нормально, но я поддерживаю предыдущее утверждение, что CPAN.pm не делает этого.)

Раньше я беспокоился об удалении модулей, но теперь я понимаю, что большинство модулей Perl занимают так мало места, чтоЯ просто не беспокоюсь о наличии нескольких дополнительных модулей, которые вы никогда не будете использовать.Поэтому, если вы не используете компьютер с ДЕЙСТВИТЕЛЬНО маленьким диском, я бы просто позволил ему это сделать.

В Windows или если вы используете несистемный Perl в Linux / Mac, вы можете просто удалить Perl и переустановить его.,Я не рекомендовал бы это, если вы используете системный Perl на Linux / Mac, однако, так как вы можете сломать свою ОС, делая это (вы можете быть осторожны, если будете осторожны, но не стоит экономить несколько Мб!).

В будущем вы можете легко установить локальную версию Perl, используя perlbrew , в Интернете есть учебные пособия, если документов недостаточно (их должно быть).Это также дает вам возможность играть с новейшими и лучшими версиями Perl, которые, вероятно, еще не поставлены вашей системой.Затем, если вы устанавливаете гору мусора или даже разбиваете его, делая что-то сумасшедшее, удалите эту версию и переустановите / установите другую версию.

Еще один хороший инструмент - cpanminus (или cpanm для краткости), который является более новым, более удобным для пользователя инструментом cpan.Все классные дети используют его.

15 голосов
/ 16 августа 2013

Вы можете удалить отдельные модули с помощью 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
2 голосов
/ 15 октября 2011

Я не уверен насчет удаления "всего этого" Но для удаления одного модуля вы можете использовать App::pmuninstall с его единственным скриптом pm-uninstall для удаления модулей. Тогда вы сможете написать какой-нибудь скрипт для рекурсивного удаления депов.

1 голос
/ 09 июня 2016

Если вы больше не можете использовать 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

имя этого каталога может отличаться в вашей системе.

Осторожно: Если модуль установил файлы вне этого каталога, например, файлы системной библиотеки, эти файлы останутся там.

0 голосов
/ 14 декабря 2018

Я изменю ответ 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
0 голосов
/ 15 октября 2011

Я думаю, что лучший вариант - удалить Perl и установить его снова.

...