모든 종속성을 설치하도록 CPAN에 어떻게 지시합니까?


113

모든 종속성을 설치하도록 CPAN에 어떻게 지시합니까?

나는 이것을 설정하려고 시도했다 cpan.

cpan> o conf prerequisites_policy follow
cpan> o conf commit

나는 여전히 "y"에 몇 번 대답해야했다 (그러나 이전보다 더 적었다).

항상 계속해서 설치하는 방법이 있습니까? 무인화하고 싶다.

나는 플래그가 항상 CPAN이 옳은 일을하도록 신뢰하기를 바라는 것 같고, 그것이 대답을 제안한다면 나는 그것을 따르고 싶다 (항상 Enter무언가를 요청할 때 히트 ).


1
CPAN.pm 설정을 기반으로 자동 설치 환경 변수를 설정하려면 cpan 스크립트에 기능을 추가해야합니다. 문제의 나머지 절반 인 tsee의 답변을 참조하십시오.
brian d foy

답변:


31

다음은 자동 최초 CPAN 구성을 포함하여 이러한 변경 사항을 영구적으로 만드는 한 줄입니다.

perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

또는 local::lib권한이없는 사용자를위한 모듈 과 결합하십시오 .

perl -MCPAN -Mlocal::lib=~/perl5 -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

CPAN 쉘 등을 사용하기 전에 실행하십시오.


@sdf anwer에서와 같지 않습니까?
filimonov

83

PERL_MM_USE_DEFAULT를 다음과 같이 설정하십시오.

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'

CPAN 응답을 모든 프롬프트에 대한 기본값으로 만들어야합니다.


이를 지속적으로 만들 수있는 방법이 있습니다. 매번 cpan에 "install My : Module"을 입력하면됩니다. Config.pm을 편집 하시겠습니까?
Geoff

3
리눅스를 사용한다면 export PERL_MM_USE_DEFAULT=1~ / .bashrc
andersand

1
오류가 발생 Can't locate object method "install" via package "xxx" at -e line 1.하면 모듈 이름 바로 앞에 "+"를 추가하십시오.
Yann Sagon 2014 년

55

이 질문에 대한 가장 최근의 가장 큰 대답은 cpanm대신 사용하는 것입니다 (App :: cpanminus 또는 cpanminus라고도 함)!

기술

cpanminus는 CPAN에서 모듈을 가져오고, 압축을 풀고, 빌드하고, 설치하는 스크립트이며 다른 작업은 수행하지 않습니다.

종속성이 없으며 (자체 부트 스트랩 가능) 구성이 필요하지 않으며 독립적입니다. 실행할 때 10MB의 RAM 만 필요합니다.

부트 스트랩 설치하려면 :

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

또는 perlbrew단순히 사용하는 경우

perlbrew install-cpanm

또는 cpan 자체에서 :

cpan install App::cpanminus

그때부터 실행하여 모듈을 설치합니다 (필요한 경우 루트로).

cpanm Foo::Bar

1
을 사용할 때이 문제가 cpanm있으므로 사용 하라고 말하는 것은 여기에서 해결책이 아닙니다.
reinierpost

3
블라인드 코멘트가 아닌 새로운 질문으로 여기에 링크하십시오. 내가 권한 문제가 문제가 될 수 의심
조엘 버거

Ubuntu 18.04에서 sudo apt install cpanminus make.
Pablo A

하향 투표. 사람들이 curl의 출력을 실행하도록 권장하지 마십시오.
Richard Smith

28

당신이 찾고있는 것은 다음과 같습니다.

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

prerequisites_policy 위에 다음 매개 변수를 변경하면 다음과 같습니다.

cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit

그러면 "ask / yes"에서 "yes"로 변경되고 요청이 중지됩니다.


감사! 이 두 가지 옵션이 필요하므로 계속해서 물어 보지 않았습니다!
Dat TT

이는 이러한 설정의 기본값입니다.
ikegami


6

세트

prerequisites_policy

구성에서.

구성 변수를 참조하십시오 .


2
모듈 소스 다운로드와 관련된 프롬프트입니까? 그렇다면 connect_to_internet_ok 옵션을 참조하십시오 . 그렇지 않으면 피하려는 다른 프롬프트가 무엇인지 알려주십시오.
Sinan Ünür

기본적으로이 마지막 것은 "선택적 모듈"이었습니다.
Nifle

문제는 자체적으로 자동 설치되는 것입니다. CPAN.pm은 그 일을 처리 할 기회를 얻지 못합니다. tsee의 답변을 참조하십시오.
brian d foy

1
링크는 지금 죽은 것으로 보인다
OrangeDog

3

개인적으로 나는 그런 식으로 설정을 수정하기 위해 몇 번만 시도했으며 실제로 인수 CPAN.pm를 제공 cpan하지 않고 CPAN.pm대화식 프롬프트에서 구성 하여 쉘로 이동하는 것이 더 쉽다는 것을 발견했습니다 .

$ cpan
cpan> o conf init

그러면 CPAN.pm인터페이스 구성 유틸리티 가 시작됩니다 . 간단히 살펴보고 필요한 곳에 "팔로우"를 지정하면됩니다 (질문은 잊어 버렸습니다).


특정 설정을에 전달할 수 있습니다 init. 예 : o conf init prerequisites_policy. 그런 식으로, 당신은 긴 초기화 과정을 통과해야하지만, 여전히 문제의 설정에 친절한 프롬프트를하지 않는다
이케 가미

3

나는 이것이 CPAN 모듈을 설치하는 가장 빠르고 안정적인 방법이라는 것을 알았습니다.

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"

이것은 질문에 대한 대답이 아닙니다. OP는 자동으로 의존성을 설치하고 프롬프트에 자동으로 응답하는 방법을 원합니다.
William Turrell

실제로 종속성을 설치하고 프롬프트에 자동으로 응답합니다. 나는이 순간을 포함하여 항상 그것을 사용합니다. 그러나 작은 수정이 필요하다 : yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
블라디미르 마르 첸코

" yes" 은 (는) 무엇 을해야합니까?
Peter Mortensen

2

특정 펄 스크립트에 필요한 모든 모듈 종속성을 설치하는 방법을 찾기 위해이 페이지를 찾은 사람들을 위해이 글을 작성하고 있습니다. 이에 대한 스크립트를 작성했습니다.

다음과 같이 실행되어야합니다. ./installdep.pl yourscript.pl

#!/usr/bin/perl
`sudo apt install cpanminus`;
while (<>) {
    if (/USE /i)
    {
        my $line=$_;
        $line=~ s/\s//g;
        $line=~ /^(.*)\./;
        $line=~ s/\;//;
        $line=~s/^USE//i;
        $line=~s/lib.*//i;
        $line=~s/feature.*//i;
        $line=~s/strict//i;
        $line=~s/warnings//i;
        $line =~ s/^(.*)\(.*/$1/;
        unless ($line eq '') {
        my $cmd='sudo cpanm '.$line;
        print "Installing $line \n";
        open my $cmd_fh, "$cmd |";
        while (<$cmd_fh>) {
          print "$_";
        }
        close $cmd_fh;
        print "\n";
    }
    }
}

이것은 cpanminus를 사용하여 스크립트에 필요한 모든 모듈 종속성을 설치합니다. cpanm이 설치되어 있지 않으면 설치합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.