Cách dễ nhất để cài đặt một mô-đun Perl bị thiếu là gì?


192

Tôi nhận được lỗi này:

Can't locate Foo.pm in @INC

Có cách nào dễ dàng hơn để cài đặt nó hơn là tải xuống, gỡ bỏ, tạo, v.v.?


1
Nếu các mô-đun trong câu hỏi là một mô-đun lõi, tham khảo ý kiến Làm thế nào để sửa chữa “Không thể xác định vị trí Archive / Tar.pm” .
ikegami

Hãy cẩn thận về bảo mật: những gì cần thiết để đảm bảo rằng các mô-đun chưa được sửa đổi phải được tải xuống một cách an toàn từ một trang web đáng tin cậy. Xem câu trả lời của tôi về việc sử dụng cpan.
vinc17

Câu trả lời:


226

Trên Unix :

thông thường bạn bắt đầu cpan trong vỏ của bạn:

# cpan

và gõ

install Chocolate::Belgian

hoặc ở dạng ngắn:

cpan Chocolate::Belgian

Trên Windows :

Nếu bạn đang sử dụng ActivePerl trên Windows, PPM (Trình quản lý gói Perl) có nhiều chức năng tương tự như CPAN.pm.

Thí dụ:

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

xem Làm thế nào để tôi cài đặt các mô-đun Perl? trong Câu hỏi thường gặp về CPAN

Nhiều bản phân phối gửi rất nhiều mô-đun perl dưới dạng gói.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: thể loại dev-perl

Bạn nên luôn luôn thích chúng vì bạn được hưởng lợi từ các cập nhật tự động (bảo mật) và dễ dàng gỡ bỏ . Điều này có thể khá khó khăn với chính công cụ cpan .

Đối với Gentoo, có một công cụ hay gọi là g-cpan , xây dựng / cài đặt mô-đun từ CPAN và tạo gói Gentoo ( ebuild ) cho bạn.


14
Hình thức ngắn chỉ là "cpan Chocolate :: Bỉ" từ dòng lệnh :)
brian d foy

3
IIRC ActivePerl mới nhất không còn có ppm dòng lệnh, giờ đây nó mở một GUI ưa thích.
Kev

6
Chỉ "ppm" mở GUI, nhưng theo sau là các lệnh nó vẫn ở dòng lệnh. Vì vậy, "trợ giúp ppm", "cài đặt ppm ...", v.v.
Bill Ruppert

Lưu ý rằng ppm sử dụng dấu gạch ngang cho dấu tách đường dẫn mô-đun chứ không phải dấu hai chấm thông thường. (Có lẽ vì dấu hai chấm có nghĩa là ổ đĩa trong dos?) Điều đó đã cho tôi một vài lần;)
Matthew Lock

3
@MatthewLock: ppmsử dụng dấu gạch nối -vì bạn chỉ định phân phối mà bạn muốn cài đặt, điều này trung thực hơn rất nhiều. Ví dụ, nếu bạn sử dụng cpanđể cài đặt LWP, LWP::Simplehoặc LWP::UserAgentnó sẽ cài đặt bản phân phối libwww-perlcho bạn. Phần lớn các bản phân phối chứa một mô-đun duy nhất có tên tương đương, nhưng có một số trường hợp ngoại lệ như thế
Borodin

65

Dùng thử ứng dụng :: cpanminus :

# cpanm Chocolate::Belgian

Thật tuyệt khi chỉ cần cài đặt công cụ. Nó không cung cấp chức năng phức tạp nào của CPAN hoặc CPANPLUS, vì vậy nó rất dễ sử dụng, miễn là bạn biết mô-đun nào bạn muốn cài đặt. Nếu bạn chưa có cpanminus, chỉ cần gõ:

# cpan App::cpanminus

để cài đặt nó.

Cũng có thể cài đặt nó mà không cần sử dụng cpan. Thủ tục bootstrap cơ bản là,

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

Để biết thêm thông tin, hãy truy cập trang App :: cpanminus và xem phần cài đặt.


7
Sử dụng cpanđể cài đặt App::cpanminuslà một chút kỳ lạ. Các hướng dẫn cài đặt thông thường liên quan đến thủ tục bootstrapping tải xuống một phần của nó từ cpanmin.us và sử dụng phần đó để cài đặt phần còn lại. Điều này tránh cấu hình cpanvà tạo ra một .cpanthư mục vô dụng (sau đó) .
Chas. Owens

Trên Ubuntu, bạn chỉ có thể cài đặt cpanminustừ thiết bị đầu cuối. Tôi thấy cpanmtốt hơn cpanvì nó không đặt nhật ký lỗi trên màn hình thay vì lưu trữ chúng trong các tệp nhật ký tạm thời và đưa ra đường dẫn trong trường hợp có lỗi.
dùng13107

Tôi gặp lỗi này khi thử lệnh của bạn: Không thể xác định vị trí nghiêm ngặt.pm trong @INC (bạn có thể cần cài đặt mô-đun nghiêm ngặt) (@INC chứa: / etc / perl
IgorGanapolsky

29

Tôi lưu ý một số người đề nghị một cpan chạy theo sudo. Điều đó từng là cần thiết để cài đặt vào thư mục hệ thống, nhưng các phiên bản hiện đại của vỏ CPAN cho phép bạn định cấu hình nó để sử dụng sudo chỉ để cài đặt. Điều này an toàn hơn nhiều, vì điều đó có nghĩa là các bài kiểm tra không chạy bằng root.

Nếu bạn có vỏ CPAN cũ, chỉ cần cài đặt cpan mới ("cài đặt CPAN") và khi bạn tải lại vỏ, nó sẽ nhắc bạn định cấu hình các chỉ thị mới này.

Ngày nay, khi tôi sử dụng hệ thống có CPAN cũ, điều đầu tiên tôi làm là cập nhật trình bao và thiết lập nó để làm điều này để tôi có thể thực hiện hầu hết công việc cpan của mình như một người dùng bình thường.

Ngoài ra, tôi thực sự khuyên bạn nên điều tra người dùng Windows điều tra dâu tây Perl . Đây là phiên bản của Perl đi kèm với vỏ CPAN được cấu hình sẵn cũng như trình biên dịch. Nó cũng bao gồm một số mô-đun Perl khó biên dịch với các phụ thuộc thư viện C bên ngoài của chúng, đáng chú ý là XML :: Parser. Điều này có nghĩa là bạn có thể làm điều tương tự như mọi người dùng Perl khác khi cài đặt các mô-đun và mọi thứ có xu hướng "chỉ hoạt động" thường xuyên hơn rất nhiều.


1
install CPANtừ đâu? $sudo apt-get install cpan?
đẳng cấu

1
@Lao Tzu: không, vì CPAN là mô-đun lõi Perl và không có sẵn dưới dạng gói DEB riêng biệt. Tôi nghĩ rằng trong hầu hết các tình huống thậm chí còn tốt hơn để sử dụng App::cpanminus, đó là một niềm vui để sử dụng nó. Philip Potter gợi ý nó trong câu trả lời của anh ấy ở đây và bạn có thể thử Chas này. Owens trả lời .
tuần

25

Nếu bạn đang sử dụng Ubuntu và bạn muốn cài đặt mô-đun perl được đóng gói sẵn (ví dụ: Geo :: ipfree), hãy thử điều này:

    $ apt-cache tìm kiếm perl Geo :: ipfree
    libgeo-ipfree-perl - Một quốc gia tìm địa chỉ IP mô-đun Perl

    $ sudo apt-get cài đặt libgeo-ipfree-perl

Điều đó thật tuyệt. Cảm ơn bạn.
Ivan X

16

Một vài người đã đề cập đến tiện ích cpan, nhưng nó không chỉ là bắt đầu một trình bao. Chỉ cần cung cấp cho nó các mô-đun mà bạn muốn cài đặt và để nó hoạt động.

$prompt> cpan Foo::Bar

Nếu bạn không cung cấp cho nó bất kỳ đối số nào, nó sẽ khởi động shell CPAN.pm. Điều này hoạt động trên Unix, Mac và sẽ tốt trên Windows (đặc biệt là Strawberry Perl).

Có một số điều khác mà bạn có thể làm với công cụ cpan. Dưới đây là tóm tắt về các tính năng hiện tại (có thể mới hơn các tính năng đi kèm với CPAN.pm và 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'


Thật tuyệt vời, điều này đã làm việc với tôi ngay bây giờ trên Windows với Git perl, nhưng tôi phải cài đặt GnuWin trước
wytten


8

Otto đã đưa ra một đề nghị tốt . Điều này cũng hoạt động với Debian, cũng như mọi dẫn xuất Debian khác. Phần còn thiếu là phải làm gì khi tìm kiếm apt-cache không tìm thấy thứ gì đó.

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

Sau đó, bất cứ khi nào bạn có một mô-đun ngẫu nhiên bạn muốn cài đặt:

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

Điều này sẽ cung cấp cho bạn một gói gỡ lỗi mà bạn có thể cài đặt để nhận một số :: Random :: Module. Một trong những lợi ích lớn ở đây là các trang man và tập lệnh mẫu ngoài chính mô-đun sẽ được đặt ở vị trí lựa chọn của nhà phân phối của bạn. Nếu bản phân phối đi kèm với gói chính thức cho phiên bản mới hơn của Một số :: Random :: Module, nó sẽ tự động được cài đặt khi bạn nâng cấp apt-get.


7

Đã trả lời và chấp nhận câu trả lời - nhưng dù sao:

IMHO cách dễ nhất để cài đặt các mô-đun CPAN (trên unix như các hệ thống và không biết gì về các kỳ quan) là:

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

Ở trên là cài đặt "trình cài đặt mô-đun CPAN cấu hình không" được gọi cpanm. (Có thể mất vài phút để cài đặt - không phá vỡ quy trình)

và sau - đơn giản là:

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

6

Rất nhiều khuyến nghị cho CPAN.pm, điều này thật tuyệt, nhưng nếu bạn đang sử dụng Perl 5.10thì bạn cũng có quyền truy cập vào CPANPLUS.pmđó CPAN.pmnhưng tốt hơn.

Và, tất nhiên, nó có sẵn CPANcho những người vẫn sử dụng các phiên bản cũ hơn của Perl. Sao không thử nhỉ:

$ cpan CPANPLUS

Heh, thật dễ thương. Sử dụng CPAN.pm để thay thế chính nó bằng CPANPLUS. :)
brian d foy

5

Nhiều lần xảy ra lệnh cpan install thất bại với thông báo như "make test đã trả về trạng thái xấu, sẽ không cài đặt mà không bắt buộc"

Trong trường hợp đó, đây là cách để cài đặt mô-đun:

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

Thật không may, điều này mang lại: Không thể định vị CPAN.pm trong @INC (bạn có thể cần cài đặt mô-đun CPAN) (@INC chứa: / etc / perl
IgorGanapolsky

4

Trên Ubuntu, hầu hết các mô-đun perl đã được đóng gói, vì vậy việc cài đặt nhanh hơn nhiều so với hầu hết các hệ thống khác phải biên dịch.

Để cài đặt Foo::Bartại một dấu nhắc commANGE chẳng hạn, thông thường bạn chỉ cần làm:

sudo apt-get install libfoo-bar-perl

Đáng buồn thay, không phải tất cả các mô-đun tuân theo quy ước đặt tên.



4

Sử dụng lệnh cpan như cpan Modulename

$ cpan HTML::Parser

Để cài đặt phụ thuộc tự động làm theo dưới đây

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

Tôi thích App :: cpanminus , nó tự động cài đặt các phụ thuộc. Cứ làm đi

$ cpanm HTML::Parser

3

2 cách mà tôi biết:

SỬ DỤNG PPM:

Với Windows (ActivePerl) Tôi đã sử dụng ppm

từ dòng lệnh ppm. Tại dấu nhắc ppm ...

ppm> install foo

hoặc là

ppm> search foo

để có được một danh sách các mô-đun foo có sẵn. Nhập trợ giúp cho tất cả các lệnh

SỬ DỤNG CPAN:

bạn cũng có thể sử dụng CPAN như thế này ( hệ thống * nix ):

perl -MCPAN -e 'shell'

giúp bạn nhanh chóng

cpan>

tại dấu nhắc ...

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

gõ h để có danh sách các lệnh cho cpan


1
Bạn cũng có thể chỉ cần nói "$ cpan Foo :: Bar" để cài đặt trực tiếp từ dòng lệnh. Không cần vỏ một lớp hoặc CPAN ưa thích. :)
brian d foy

3

Trên Fedora bạn có thể sử dụng

# yum install foo

miễn là Fedora có một gói hiện có cho mô-đun.


3

Trên Fedora Linuxhoặc Enterprise Linux, yumcũng theo dõi phụ thuộc thư viện perl. Vì vậy, nếu mô-đun perl có sẵn và một số gói vòng / phút xuất phụ thuộc đó, nó sẽ cài đặt gói phù hợp với bạn.

yum install 'perl(Chocolate::Belgian)'

(rất có thể là gói perl-Chocolate-Bỉ, hoặc thậm chí là gói ChocolateFactory)


3

Cách dễ nhất đối với tôi là thế này:

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

a) tự động phát hiện / giải quyết / cài đặt phụ thuộc đệ quy

b) nó là một trình điều khiển shell, tốt cho các tập lệnh thiết lập


2

Nếu bạn muốn đặt mô-đun mới vào một vị trí tùy chỉnh mà vỏ cpan của bạn không được cấu hình để sử dụng, thì có lẽ, những điều sau đây sẽ có ích.

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

2

Đôi khi bạn có thể sử dụng yum search foođể tìm kiếm mô-đun perl tương đối, sau đó sử dụng yum install xxxđể cài đặt.


2

Giải pháp an toàn

Nhiều câu trả lời đề cập đến việc sử dụng cpantiện ích (sử dụng CPAN.pm) mà không có một từ nào về bảo mật. Theo mặc định, CPAN2.27 và các cấu hình trước đó urllistđể sử dụng URL http (cụ thể là http://www.cpan.org/ ), cho phép các cuộc tấn công MITM, do đó không an toàn. Đây là những gì được sử dụng để tải xuống các CHECKSUMStệp, do đó, nó cần được thay đổi thành một URL an toàn (ví dụ: https://www.cpan.org/ ).

Vì vậy, sau khi chạy cpan và chấp nhận cấu hình mặc định, bạn cần sửa đổi MyConfig.pmtệp được tạo (đường dẫn đầy đủ là đầu ra) theo cách sau. Thay thế

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

bởi

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

Lưu ý: https là không đủ; bạn cũng cần một trang web mà bạn có thể tin tưởng. Vì vậy, hãy cẩn thận nếu bạn muốn chọn một số gương tùy ý.

Sau đó, bạn có thể sử dụng cpantheo cách thông thường.

Báo cáo lỗi của tôi trên rt.cpan.org về URL không an toàn.


" Cpan.org " không được chuyển hướng đến " cpan.org "?
Dave Everitt

1
@DaveEveritt Việc chuyển hướng từ http sang https chỉ hữu ích cho quyền riêng tư, ví dụ như chống lại ai đó chỉ có thể nhìn vào dữ liệu chuyển đổi trên mạng. Nhưng nếu kẻ tấn công kiểm soát mạng (ví dụ: điểm phát wifi công cộng hoặc một số mạng cục bộ không được bảo vệ), một cuộc tấn công trung gian có thể xảy ra và kẻ tấn công sẽ sử dụng máy chủ của chính mình (rõ ràng là không https://www.cpan.org/).
vinc17

1

Trên Windows với bản phân phối ActiveState của Perl, hãy sử dụng lệnh ppm .


1

Đơn giản chỉ cần thực hiện cpan Foo::Bartrên shell sẽ phục vụ mục đích.


1

Có vẻ như bạn đã có câu trả lời của mình nhưng tôi đoán tôi đã bấm chuông. Đây là những gì tôi làm trong một số tập lệnh trên Ubuntu (hoặc máy chủ debian)

#!/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";
    }
}

Điều này làm việc tốt cho tôi, có thể có một cái gì đó ở đây bạn có thể sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.