누락 된 Perl 모듈을 설치하는 가장 쉬운 방법은 무엇입니까?


192

이 오류가 발생합니다.

Can't locate Foo.pm in @INC

다운로드, 언 타링, 제작 등보다 쉬운 설치 방법이 있습니까?


1
해당 모듈이 핵심 모듈 인 경우 "Archive / Tar.pm을 찾을 수 없음"수정 방법을 참조하십시오 .
— ikegami

보안에 대해 매우주의하십시오. 모듈이 수정되지 않았는지 확인하려면 신뢰할 수있는 사이트에서 안전한 방법으로 다운로드해야합니다. 의 사용에 대한 내 답변을 참조하십시오 cpan.
— vinc17

답변:


226

유닉스에서 :

일반적으로 쉘에서 cpan 을 시작 합니다.

# cpan

그리고 유형

install Chocolate::Belgian

또는 짧은 형태로 :

cpan Chocolate::Belgian

Windows에서 :

Windows에서 ActivePerl을 사용하는 경우 PPM (Perl Package Manager) 은 CPAN.pm과 기능이 거의 동일합니다.

예:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

Perl 모듈을 설치하는 방법을 참조하십시오 . CPAN FAQ에서

많은 배포판이 많은 펄 모듈을 패키지로 제공합니다.

  • 데비안 / 우분투 : apt-cache search 'perl$'
  • 아치 리눅스 : pacman -Ss '^perl-'
  • 젠투 : 카테고리 dev-perl

당신은해야한다 항상 당신이 자동 (보안) 혜택으로 그들을 선호 업데이트 및의 용이성 제거 . cpan 도구 자체 로는 꽤 까다로울 수 있습니다 .

젠투에는 CPAN에서 모듈을 빌드 / 설치하고 젠투 패키지 ( ebuild )를 생성하는 g-cpan 이라는 멋진 도구 가 있습니다.


14
짧은 형식은 명령 줄에서 "cpan Chocolate :: Belgian"입니다. :)
— brian d foy

3
최신 ActivePerl IIRC에 더 이상 명령 줄 ppm이 없어 이제 멋진 GUI가 열립니다.
— Kev

6
"ppm"만 있으면 GUI가 열리고 명령이 계속 표시됩니다. "ppm help", "ppm install ..."등
— Bill Ruppert

ppm은 일반적인 이중 콜론이 아닌 모듈 경로 구분 기호로 대시를 사용합니다. (아마도 콜론이 운전을하는 것을 의미하기 때문에?) 그것은 몇 번이나 가져 왔습니다.
— Matthew Lock

3
@MatthewLock : 설치하려는 배포판 을 지정하기 때문에 ppm하이픈 -을 사용합니다 . 훨씬 정직합니다. 예를 들어, 사용하는 경우 설치 , 또는 그것을 배포를 설치합니다 당신을 위해. 대부분의 배포판에는 동일한 이름의 단일 모듈이 포함되어 있지만 다음과 같은 예외가 있습니다.cpanLWPLWP::SimpleLWP::UserAgentlibwww-perl
— Borodin

65

App :: cpanminus를 보십시오 :

# cpanm Chocolate::Belgian

물건을 설치하는 데 좋습니다. CPAN 또는 CPANPLUS의 더 복잡한 기능은 제공하지 않으므로 설치할 모듈을 알고 있으면 사용하기 쉽습니다. cpanminus를 아직 얻지 못했다면 다음을 입력하십시오.

# cpan App::cpanminus

그것을 설치하십시오.

cpan을 전혀 사용하지 않고 설치할 수도 있습니다. 기본 부트 스트랩 절차는 다음과 같습니다.

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

자세한 내용은 App :: cpanminus 페이지로 이동하여 설치 섹션을 참조하십시오.


7
cpan설치에 사용 하는 App::cpanminus것은 약간 이상합니다. 일반적인 설치 지침에는 cpanmin.us 에서 일부를 다운로드 하여 나머지를 설치 하는 부트 스트랩 절차가 포함됩니다 . 이것은 cpan(이후에) 쓸모없는 .cpan디렉토리 의 구성 과 생성을 피합니다 .
— Chas. Owens

우분투에서는 cpanminus터미널에서 설치할 수 있습니다 . 내가 찾아 cpanm보다 나은 cpan그것은 임시 로그 파일에 오히려 매장을 화면에 에러 로그를 넣어 오류의 경우에 경로를 제공하지 않기 때문에.
— user13107

당신의 명령을 시도 할 때 나는이 오류가 무엇입니까 : (당신이 엄격한 모듈을 설치해야 할 수도 있습니다) @INC에 strict.pm를 찾을 수 없습니다 (@ INC는 포함 / 등 / 펄
— IgorGanapolsky

29

일부 사람들은 sudo에서 하나의 실행 cpan을 제안합니다. 이전에는 시스템 디렉토리에 설치해야했지만 최신 버전의 CPAN 셸에서는 설치시 에만 sudo를 사용하도록 구성 할 수 있습니다 . 테스트가 루트로 실행되지 않기 때문에 훨씬 안전합니다.

이전 CPAN 셸이있는 경우 새 cpan ( "install CPAN")을 설치하고 셸을 다시로드하면 이러한 새 지시문을 구성하라는 메시지가 표시됩니다.

요즘에는 오래된 CPAN이있는 시스템에있을 때 가장 먼저 쉘을 업데이트하고이를 수행하도록 설정하여 대부분의 cpan 작업을 일반 사용자로 수행 할 수 있습니다.

또한 Windows 사용자는 strawberry Perl을 조사하는 것이 좋습니다 . 이것은 컴파일러뿐만 아니라 사전 구성된 CPAN 셸과 함께 제공되는 Perl 버전입니다. 또한 외부 C 라이브러리 종속성, 특히 XML :: Parser와 함께 컴파일하기 어려운 Perl 모듈도 포함합니다. 이는 모듈을 설치할 때 다른 모든 Perl 사용자와 동일한 작업을 수행 할 수 있으며 일이 더 자주 "작동하는"경향이 있음을 의미합니다.


1
install CPAN어디서? $sudo apt-get install cpan?
— 동 형사상

1
@Lao Tzu : 아니요. CPAN은 Perl 코어 모듈이므로 별도의 DEB 패키지로 사용할 수 없습니다. 나는 대부분의 상황에서 사용하는 것이 훨씬 낫다고 생각 App::cpanminus합니다. 필립 포터는 그의 대답에서 그것을 제안하고 당신은 이 Chas를 시도 할 수 있습니다. Owens가 대답 합니다.
— wk

25

Ubuntu를 사용 중이고 사전 패키지 된 perl 모듈 (예 : geo :: ipfree)을 설치하려면 다음을 시도하십시오.

    $ apt- 캐시 검색 perl geo :: ipfree
    libgeo-ipfree-perl-IP 주소 Perl 모듈의 조회 국가

    $ sudo apt-get 설치 libgeo-ipfree-perl

대단하다. 감사합니다.
— Ivan X

16

두 사람이 cpan 유틸리티를 언급했지만 쉘을 시작하는 것 이상입니다. 설치하려는 모듈을 제공하고 작동하도록하십시오.

$prompt> cpan Foo::Bar

인수를 제공하지 않으면 CPAN.pm 쉘을 시작합니다. 이것은 Unix, Mac에서 작동하며 Windows (특히 Strawberry Perl)에서는 잘 작동합니다.

cpan 도구로 수행 할 수있는 다른 작업도 몇 가지 있습니다. 다음은 현재 기능에 대한 요약입니다 (CPAN.pm 및 perl과 함께 제공되는 기능보다 최신 기능 일 수 있음).

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.

11

sudo perl -MCPAN -e 'install Foo'


브릴리언트,이 망할 놈의 펄과 Windows에서 지금 나를 위해 일하지만, 내가 먼저 GnuWin 메이크업을 설치했다
— wytten


8

오토는 좋은 제안을했다 . 이것은 데비안뿐만 아니라 다른 데비안 파생물에서도 작동합니다. 누락 된 부분은 apt-cache 검색에서 무언가를 찾지 못할 때 수행 할 작업입니다.

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

그런 다음 임의 모듈이있을 때마다 설치하려고합니다.

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

그러면 Some :: Random :: Module을 얻기 위해 설치할 수있는 deb 패키지가 제공됩니다. 여기서 큰 이점 중 하나는 모듈 자체 외에 매뉴얼 페이지와 샘플 스크립트가 배포판의 선택한 위치에 배치된다는 것입니다. 배포판에 Some :: Random :: Module의 최신 버전에 대한 공식 패키지가 제공되는 경우 업그레이드를 수행 할 때 자동으로 설치됩니다.


7

이미 답변하고 수락했습니다. 그러나 어쨌든 :

시스템과 같은 유닉스에서 CPAN 모듈을 설치하는 가장 쉬운 방법은 IMHO입니다.

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

위의 "제로 구성 CPAN 모듈 설치 관리자"를 설치 cpanm합니다. (설치하는 데 몇 분이 걸릴 수 있음-프로세스를 중단하지 마십시오)

그리고 이후-단순히 :

cpanm Foo
cpanm Module::One
cpanm Another::Module

6

에 대한 많은 권장 사항 CPAN.pm은 훌륭하지만 사용하는 경우 Perl 5.10다음 CPANPLUS.pm과 같은 액세스 권한 이 CPAN.pm있지만 더 좋습니다.

물론 CPAN이전 버전의 Perl을 사용하는 사람들도 사용할 수 있습니다 . 시도해 보지 않겠습니까?

$ cpan CPANPLUS

응, 귀엽네 CPAN.pm을 사용하여 CPANPLUS로 교체하십시오. :)
— brian d foy

5

"테스트가 잘못된 상태를 반환했습니다. 강제로 설치하지 않습니다." 와 같은 메시지와 함께 cpan install 명령이 실패하는 경우가 많습니다.

이 경우 다음은 모듈을 설치하는 방법입니다.

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"

불행히도 결과는 @INC에서 CPAN.pm을 찾을 수 없습니다 (CPAN 모듈을 설치해야 할 수도 있음) (
— @ INC

4

우분투에서는 대부분의 perl 모듈이 이미 패키지되어 있으므로 컴파일해야하는 대부분의 다른 시스템보다 설치 속도가 훨씬 빠릅니다.

Foo::Bar예를 들어 일반적인 프롬프트에서 설치하려면 다음을 수행하십시오.

sudo apt-get install libfoo-bar-perl

안타깝게도 모든 모듈이 해당 명명 규칙을 따르는 것은 아닙니다.



4

cpan 명령을 다음과 같이 사용하십시오. cpan Modulename

$ cpan HTML::Parser

종속성을 자동으로 설치하려면 다음을 따르십시오.

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

App :: cpanminus 선호하며 종속성을 자동으로 설치합니다. 그냥 해

$ cpanm HTML::Parser

3

내가 아는 두 가지 방법 :

PPM 사용 :

와 윈도우 (ActivePerl의) 내가 사용했습니다 PPM

명령 행 유형에서 ppm. ppm 프롬프트에서 ...

ppm> install foo

또는

ppm> search foo

사용 가능한 foo 모듈 목록을 가져옵니다. 모든 명령에 대한 도움말 을 입력 하십시오

CPAN 사용 :

다음과 같이 CPAN을 사용할 수도 있습니다 ( * nix 시스템 ).

perl -MCPAN -e 'shell'

당신에게 프롬프트를 얻는다

cpan>

프롬프트에서 ...

cpan> install foo  (again to install the foo module)

cpan에 대한 명령 목록을 얻으려면 h를 입력하십시오.


1
"$ cpan Foo :: Bar"라고 말하면 명령 줄에서 직접 설치할 수 있습니다. 멋진 1 라이너 또는 CPAN 쉘이 필요하지 않습니다. :)
— brian d foy

3

Fedora에서는 다음을 사용할 수 있습니다

# yum install foo

Fedora에 모듈에 대한 기존 패키지가있는 한.


3

에 Fedora Linux또는 Enterprise Linux, yum또한 트랙 라이브러리 의존성을 펄. 따라서 perl 모듈을 사용할 수 있고 일부 rpm 패키지가 해당 종속성을 내 보내면 올바른 패키지가 설치됩니다.

yum install 'perl(Chocolate::Belgian)'

(대부분 perl-Chocolate-Belgian 패키지 또는 심지어 ChocolateFactory 패키지)


3

가장 쉬운 방법은 다음과 같습니다.

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'

a) 자동 재귀 종속성 감지 / 해결 / 설치

b) 온라인 스크립트이며 설정 스크립트에 적합합니다.


2

cpan 쉘이 사용하도록 구성되지 않은 사용자 정의 위치에 새 모듈을 배치하려면 다음이 유용 할 것입니다.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install

2

때로는를 사용하여 yum search foo상대 perl 모듈을 검색 한 다음 yum install xxx설치에 사용할 수 있습니다.


2

안전한 솔루션

많은 답변 은 보안에 대한 단어없이 cpan유틸리티를 사용하는 것을 언급합니다 CPAN.pm. 기본적으로 CPAN2.27 이하 는 MITM 공격을 허용 urllist하는 http URL (즉, http://www.cpan.org/ ) 을 사용 하도록 구성 되므로 안전하지 않습니다. CHECKSUMS파일 을 다운로드하는 데 사용 되므로 보안 URL (예 : https://www.cpan.org/ ) 로 변경해야합니다 .

따라서 cpan을 실행하고 기본 구성을 승인 한 후 MyConfig.pm다음 방법으로 생성 된 파일 (전체 경로가 출력 됨) 을 수정해야합니다 . 바꾸다

'urllist' => [q[http://www.cpan.org/]],

으로

'urllist' => [q[https://www.cpan.org/]],

참고 : https로는 충분하지 않습니다. 또한 신뢰할 수있는 웹 사이트가 필요합니다. 임의의 미러를 선택하려면주의하십시오.

그런 다음 cpan일반적인 방법으로 사용할 수 있습니다 .

내 버그 리포트 안전하지 않은 URL에 대한 rt.cpan.org합니다.


" cpan.org "가 " cpan.org "로 리디렉션되지 않습니까?
— Dave Everitt

1
@DaveEveritt http에서 https 로의 경로 재 지정은 개인 정보 보호에만 유용합니다 (예 : 네트워크에서 전송중인 데이터 만 볼 수있는 사람). 그러나 공격자가 네트워크를 제어하는 ​​경우 (예 : 공용 Wi-Fi 핫스팟 또는 일부 보호되지 않은 로컬 네트워크) 중간자 공격 이 가능할 수 있으며 공격자는 자신의 서버를 사용합니다 (분명히 https://www.cpan.org/).
— vinc17

1

Perl이 ActiveState로 배포 된 Windows에서는 ppm 명령을 사용하십시오 .



1

당신이 이미 답을 얻은 것처럼 보이지만 나는 차임 할 것이라고 생각했습니다. 이것은 우분투 (또는 데비안 서버)의 일부 스크립트에서 수행하는 작업입니다.

#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}

이것은 나를 위해 잘 작동합니다. 어쩌면 여기에 사용할 수있는 것이있을 수 있습니다.

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