Удалите все модули Perl, установленные cpan

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

cpan -i Software

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


person janoliver    schedule 15.10.2011    source источник


Ответы (6)


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

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

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

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

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

person Joel Berger    schedule 15.10.2011
comment
Спасибо за хорошее объяснение. Я немного покопался в каталогах lib и решил сохранить все эти файлы, как вы предложили. - person janoliver; 15.10.2011
comment
@xenoterracide это зависит от того, что вы использовали cpanm для установки? беглый взгляд на документ, казалось, подсказал это. в любом случае, я не вижу необходимости удалять практически какие-либо модули на CPAN, по крайней мере, с точки зрения хранения данных. Тем не менее приятно знать, что что-то существует - person Joel Berger; 15.10.2011
comment
нет, cpanm afaik ничего не делает в плане написания того, что делают cpan и cpanp. - person xenoterracide; 16.10.2011
comment
круто +1! Я заметил, что он отправляется в Интернет для поиска зависимостей, но, учитывая ограничения, которые дает ему CPAN.pm, я рад, что они что-то выяснили, а не проигнорировали! - person Joel Berger; 16.10.2011
comment
Я просто смотрел на это и думал, что одна из причин удаления модулей - это когда вы разрабатываете один из них, вы удаляете один из его модулей в выпуске для разработчиков, но он все еще установлен и, следовательно, находится в вашей библиотеке. Удаление - лучшая идея. - person xenoterracide; 27.09.2012
comment
@xenoterracide, только что видел это. Я бы сказал, что в этом случае вам следует использовать Perlbrew и получить полностью чистый Perl для тестирования. Это поможет вам проверить наличие необъявленных зависимостей и т. Д. - person Joel Berger; 07.03.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
person Flimm    schedule 16.08.2013
comment
Я предполагаю, что строка 2 скрипта должна быть cpanm --uninstall "$module" - person Martin Grohmann; 13.04.2014

Я не уверен в удалении «всего этого». Но для удаления одного модуля вы можете использовать App::pmuninstall с единственным скриптом _ 2_, чтобы удалить модули. Тогда вы сможете написать какой-нибудь скрипт для рекурсивного удаления deps.

person xenoterracide    schedule 15.10.2011

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

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

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

person Maikel    schedule 09.06.2016

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

person DavidEG    schedule 15.10.2011
comment
Единственная проблема с этим предложением заключается в том, что вы НЕ должны этого делать, поскольку вы используете общесистемную установку на Linux / Mac. Если вы работаете в Windows, это, вероятно, предпочтительнее. - person Joel Berger; 15.10.2011

Я изменю ответ 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
person Andrew Selivanov    schedule 14.12.2018