program story

'cpan'을 통해 설치된 Perl 모듈을 어떻게 제거 할 수 있습니까?

inputbox 2020. 11. 23. 08:04
반응형

'cpan'을 통해 설치된 Perl 모듈을 어떻게 제거 할 수 있습니까?


사용자 공간 (루트를 통해 설치되지 않음)에서 실행중인 Perl을 사용하고 명령 줄을 통해 모듈을 설치하고 있습니다 cpan. 개별 파일을 삭제하는 많은 작업을 할 필요없이 모듈을 제거하는 간단한 방법이 있는지 알고 싶습니다.

나는 인터넷 에서이 질문을 검색하고 몇 가지 답변을 찾았지만 내가 찾은 답변은 Perl 패키지 관리자 (Microsoft Windows 전용) 또는 운영 체제 별 (BSDpan) 사용에 대해 논의하는 것처럼 보입니다. 나는 여러 가지 나쁜 경험을했거나) 다음과 같이 죽은 링크를 가리키며 끝났습니다 http://www.cpan.org/misc/cpan-faq.html#How_delete_Perl_modules.

내 질문은 특히 .NET을 통해 설치된 모듈을 제거하는 깨끗한 방법이 있는지 여부 cpan입니다.


당신은 할 수 없습니다. 내 CPAN 클라이언트에는 이러한 작업을 수행하는 기능이 없습니다. 우리는 이번 주말의 Perl QA Workshop에서 어떻게 그렇게 할 수 있는지에 대해 이야기하고 있었지만 Ether가 언급 한 모든 이유로 일반적으로 어렵습니다.


  1. App::cpanminusCPAN에서 설치합니다 (사용 :이를 cpan App::cpanminus위해).
  2. cpanminus를 사용하여 모듈을 제거하려면 입력 cpanm --uninstall Module::Name( " m" 참고)하십시오 .

작동합니다.


일반적으로 CPAN 모듈과 함께 제공되는 특정 '제거'메커니즘은 없습니다. 그러나 일부 패키지에는 설치 스크립트에이 지시문이 포함되어 make uninstall있으므로 모듈이 압축 해제 된 원래 디렉토리 (종종 /root/.cpan또는 아래에 있음 ~/.cpan) 에서 시도 할 수 있습니다 . (그러나 로컬 (루트가 아닌) 라이브러리 디렉토리에 모듈을 설치 했으므로이 전체 디렉토리를 날려 버리고 유지하려는 다른 모든 것을 다시 설치할 수도 있습니다.)

많은 시간 동안 perllib에서 A/B.pm파일 ( A::B모듈 용)을 제거하는 것만으로도 벗어날 수 있습니다. 그러면 최소한 모듈을 사용할 수 없게됩니다. 대부분의 모듈에는 설치할 파일 목록 ( "매니페스트"라고 함)도 포함되어 있으므로이를 찾을 수 있으면 삭제할 수있는 파일을 알 수 있습니다.

그러나 이러한 접근 방식은 종속성으로 설치된 모듈을 처리하지 않습니다. 다른 것이 해당 모듈에 종속되어 있는지 알 수있는 좋은 (자동화 된) 방법이 없으므로 확신이 들면 수동으로도 제거해야합니다.

모듈 제거의 어려움은 많은 Perl 개발자가 설치를 추적하기 위해 개정 제어 시스템을 사용하는 한 가지 이유입니다. 예를 들어 brian d foy기사 를 패키지 관리를위한 git 사용에 대해 논의하는 그의 다가오는 책의 보충 자료로 참조하십시오 .


CPAN에는 모듈을 제거하려는 스크립트가 있습니다.

ExtUtils :: Packlist 는 코드를 제거하는 샘플 모듈을 보여줍니다 modrm.


2013 업데이트 :이 코드는 더 이상 사용되지 않습니다. 찬성 투표 BSB는 대답을 늦게오고 대신.


모듈을 자주 제거 할 필요 .packlist는 없지만 파일 기반 접근 방식은 지금까지 실패한 적이 없습니다.

use 5.010;
use ExtUtils::Installed qw();
use ExtUtils::Packlist qw();

die "Usage: $0 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>다음 해당 모듈을 다른 위치로 이동하는 것입니다. 이 접근 방식은보다 영구적 인 해결책으로 시도 할 수도 있지만 주로 테스트를 위해 수행하므로 부정적인 결과를 알지 못합니다.

참고 URL : https://stackoverflow.com/questions/2626449/how-can-i-de-install-a-perl-module-installed-via-cpan

반응형