Как я могу деинсталлировать модуль Perl, установленный через "cpan"?
Я использую Perl, работающий в пользовательском пространстве (не установлен через root) и устанавливающий модули через командную строку cpan. Я хотел бы знать, есть ли простой способ удалить модуль без необходимости выполнять много работы по удалению отдельных файлов.
Я искал этот вопрос в интернете и нашел некоторые ответы, но ответы, которые я нашел, похоже, либо обсуждают использование диспетчера пакетов Perl (специфичного для Microsoft Windows), либо операционной системы (BSDpan), предлагая использовать cpanplus (с которым у меня было несколько плохих опытов), или закончил, указав на мертвую ссылку следующим образом: http://www.cpan.org/misc/cpan-faq.html#How_delete_Perl_modules.
мой вопрос заключается в том, есть ли чистый способ удалить модуль, установленный через cpan.
6 ответов:
вы не можете. Нет функция в моем CPAN для клиента, чтобы сделать такую вещь. Мы говорили о том, как мы могли бы сделать что-то подобное на семинаре Perl QA в эти выходные, но это, как правило, трудно по всем причинам, которые упоминал эфир.
- установить
App::cpanminusот CPAN (использование:cpan App::cpanminusдля этого).- тип
cpanm --uninstall Module::Name(обратите внимание на "m") для удаления модуля с помощью cpanminus.это должно работать.
как правило, нет конкретного механизма "удаления", который поставляется с модулями CPAN. Но вы можете попробовать
make uninstallв исходном каталоге модуль распакован в (это часто под/root/.cpanили~/.cpan), так как некоторые пакеты содержат эту директиву в своем сценарии установки. (Однако, поскольку вы установили модули в локальный (некорневой) каталог библиотеки, у вас также есть возможность сдуть весь этот каталог и переустановить все остальное, что вы хотите держать.)много времени вы можете просто уйти с удалением (для
A::Bmodule) из вашего perllib -- это, по крайней мере, сделает модуль непригодным для использования. Большинство модулей также содержат список файлов для установки (так называемый "манифест"), так что если вы можете найти его, вы будете знать, какие файлы вы можете удалить.однако ни один из этих подходов не будет касаться модулей, установленных в качестве зависимостей. Нет хорошего (автоматизированного) способа узнать, если что-то еще зависит от этого модуля, поэтому вам придется удалить его вручную, как только вы будете уверены.
сложность удаления модулей является одной из причин, почему многие разработчики Perl переходят к использованию системы контроля версий для отслеживания установок - например, см. статьи Брайан Д Фой в качестве дополнения к своей книге это обсуждает использование git для управления пакетами.
есть скрипты на CPAN, которые пытаются удалить модули:
ExtUtils::Packlist показывает пример модуля удаления кода,
modrm.
обновление 2013: этот код устарел. Здесь поздний ответ bsb.
мне не нужно часто удалять модули, но подход никогда не подводил меня до сих пор.
use 5.010; use ExtUtils::Installed qw(); use ExtUtils::Packlist qw(); die "Usage: Module::Name Module::Name\n" unless @ARGV; for my $mod (@ARGV) { my $inst = ExtUtils::Installed->new; foreach my $item (sort($inst->files($mod))) { say "removing $item"; unlink $item or warn "could not remove $item: $!\n"; } my $packfile = $inst->packlist($mod)->packlist_file; print "removing $packfile\n"; unlink $packfile or warn "could not remove $packfile: $!\n"; }
Так как во время установки любого модуля он в основном помещает соответствующие файлы .pm в соответствующие каталоги. Так что если вы хотите удалить модуль только для целей тестирования или временно лучше найти путь, где модуль хранится с помощью
perldoc -l <MODULE>а затем просто переместите модуль оттуда в другое место. Этот подход также можно попробовать как более постоянное решение, но я не знаю никаких негативных последствий, поскольку я делаю это в основном для тестирования.
Comments