누락 된 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.