วิธีที่ง่ายที่สุดในการติดตั้งโมดูล Perl ที่ขาดหายไปคืออะไร


192

ฉันได้รับข้อผิดพลาดนี้:

Can't locate Foo.pm in @INC

มีวิธีที่ง่ายกว่าในการติดตั้งกว่าการดาวน์โหลด, ไม่เปิดเผย, การสร้างและอื่น ๆ ?


1
ถ้าโมดูลในคำถามคือโมดูลหลักปรึกษาวิธีการแก้ไข“ไม่สามารถหาเอกสารเก่า / Tar.pm”
ikegami

ระมัดระวังเกี่ยวกับความปลอดภัย: สิ่งที่จำเป็นเพื่อให้แน่ใจว่าโมดูลที่ไม่ได้ถูกแก้ไขจะต้องดาวน์โหลดในวิธีที่ปลอดภัยจากเว็บไซต์ที่เชื่อถือได้ ดูคำตอบของฉันcpanเกี่ยวกับการใช้งานของ
vinc17

คำตอบ:


226

บน Unix :

โดยปกติคุณจะเริ่มcpanในเปลือกของคุณ:

# cpan

และประเภท

install Chocolate::Belgian

หรือในรูปแบบย่อ:

cpan Chocolate::Belgian

บน Windows :

หากคุณใช้ ActivePerl บน Windows PPM (Perl Package Manager)มีฟังก์ชันการทำงานเหมือนกับ CPAN.pm

ตัวอย่าง:

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

ดูฉันจะติดตั้งโมดูล Perl ได้อย่างไร ในคำถามที่พบบ่อยของ CPAN

ดิสทริบิวชันส่วนใหญ่จัดส่งโมดูล perl เป็นแพคเกจจำนวนมาก

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: หมวดหมู่ dev-perl

คุณควรเสมอชอบพวกเขาในขณะที่คุณได้รับประโยชน์จาก (ปลอดภัย) อัตโนมัติการปรับปรุงและความสะดวกของการกำจัด นี่อาจเป็นเรื่องยุ่งยากด้วยเครื่องมือcpanเอง

สำหรับ Gentoo มีเครื่องมือที่ดีที่เรียกว่าg-cpanซึ่งสร้าง / ติดตั้งโมดูลจาก CPAN และสร้างแพ็คเกจ Gentoo ( ebuild ) สำหรับคุณ


14
รูปแบบสั้น ๆ เพียงแค่ "ช็อคโกแลต cpan :: เบลเยียม" จากบรรทัดคำสั่ง :)
ไบรอัน D ฟอย

3
IIRC ActivePerl ล่าสุดไม่มีคำสั่ง ppm อีกต่อไปตอนนี้เปิด GUI ที่น่าสนใจ
Kev

6
เพียงแค่ "ppm" จะเปิด GUI แต่ตามด้วยคำสั่งมันจะอยู่ที่บรรทัดคำสั่ง ดังนั้น "ppm help", "ppm install ... " ฯลฯ
Bill Ruppert

โปรดทราบว่า ppm ใช้เครื่องหมายขีดกลางสำหรับตัวคั่นพา ธ โมดูลไม่ใช่โคลอนคู่ปกติ (บางทีอาจเป็นเพราะทวิภาคหมายความว่าไดรฟ์ในดอส) ที่ได้มีฉันไม่กี่ครั้ง;)
แมทธิวล็อค

3
@MatthewLock: ppmใช้เครื่องหมายขีดคั่น-เนื่องจากคุณระบุการกระจายที่คุณต้องการติดตั้งซึ่งมีความซื่อสัตย์มากกว่า ตัวอย่างเช่นถ้าคุณใช้cpanในการติดตั้งLWP, LWP::SimpleหรือLWP::UserAgentมันจะติดตั้งกระจายlibwww-perlสำหรับคุณ การแจกแจงส่วนใหญ่มีโมดูลเดียวที่มีชื่อเทียบเท่า แต่มีข้อยกเว้นหลายประการเช่นนั้น
Borodin

65

ลองใช้แอพ :: 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

บน Ubuntu คุณสามารถติดตั้งcpanminusจากเทอร์มินัล ฉันพบว่าcpanmดีกว่าcpanเพราะมันไม่ได้ใส่บันทึกข้อผิดพลาดบนหน้าจอแทนที่จะเก็บไว้ในไฟล์บันทึกชั่วคราวและให้เส้นทางในกรณีที่เกิดข้อผิดพลาด
user13107

ฉันได้รับข้อผิดพลาดนี้เมื่อลองใช้คำสั่งของคุณ: ไม่สามารถหาเข้มงวดได้ PM ใน @ INC (คุณอาจต้องติดตั้งโมดูลที่เข้มงวด) (@INC ประกอบด้วย: / etc / perl
IgorGanapolsky

29

ฉันสังเกตคนบางคนแนะนำ cpan หนึ่งรันภายใต้ sudo ที่เคยมีความจำเป็นต้องติดตั้งลงในไดเรกทอรีระบบ แต่รุ่นที่ทันสมัยของเปลือก CPAN ช่วยให้คุณสามารถกำหนดค่าให้ใช้ sudo เพียงสำหรับการติดตั้ง สิ่งนี้ปลอดภัยกว่ามากเพราะหมายความว่าการทดสอบจะไม่ทำงานเหมือนราก

หากคุณมี CPAN เชลล์เก่าเพียงแค่ติดตั้ง cpan ใหม่ ("ติดตั้ง CPAN") และเมื่อคุณโหลดเชลล์ใหม่มันควรแจ้งให้คุณกำหนดค่าคำสั่งใหม่เหล่านี้

ทุกวันนี้เมื่อฉันอยู่ในระบบที่มี CPAN เก่าสิ่งแรกที่ฉันทำคืออัปเดตเชลล์และตั้งค่าให้ทำเช่นนี้เพื่อให้ฉันสามารถทำงาน cpan ส่วนใหญ่เป็นผู้ใช้ปกติ

นอกจากนี้ผมขอขอแนะนำให้ผู้ใช้ Windows ตรวจสอบสตรอเบอร์รี่ Perl นี่เป็นรุ่นของ Perl ที่มาพร้อมกับเชลล์ CPAN ที่กำหนดค่าไว้ล่วงหน้าและคอมไพเลอร์ นอกจากนี้ยังมีโมดูล Perl ที่ยากต่อการคอมไพล์ด้วยการพึ่งพาไลบรารี C ภายนอกโดยเฉพาะอย่างยิ่ง XML :: Parser ซึ่งหมายความว่าคุณสามารถทำสิ่งเดียวกันกับผู้ใช้ Perl รายอื่นทุกครั้งเมื่อพูดถึงการติดตั้งโมดูลและสิ่งต่าง ๆ มักจะ "ทำงานได้" บ่อยครั้งมากขึ้น


1
install CPANจากที่ไหน $sudo apt-get install cpan?
isomorphismes

1
@Lao Tzu: ไม่เนื่องจาก CPAN เป็นโมดูลหลักของ Perl และไม่พร้อมใช้งานเป็นแพ็คเกจ DEB แยกต่างหาก ฉันคิดว่าในสถานการณ์ส่วนใหญ่ดีกว่าที่จะใช้App::cpanminusมันเป็นความสุขที่ได้ใช้ Philip Potter แนะนำในคำตอบของเขาที่นี่และคุณสามารถลองChas นี้ คำตอบ Owens
สัปดาห์

25

หากคุณอยู่บน Ubuntu และคุณต้องการติดตั้งโมดูล perl ล่วงหน้า (เช่น geo :: ipfree) ลองทำสิ่งนี้:

    $ apt-cache การค้นหาตำแหน่งทางภูมิศาสตร์ :: ipfree
    libgeo-ipfree-perl - ค้นหาประเทศของที่อยู่ ip โมดูล Perl

    $ sudo apt-get install 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 ด้วย Git perl แต่ฉันต้องติดตั้ง GnuWin ก่อน
wytten


8

อ็อตโตทำคำแนะนำที่ดี สิ่งนี้ใช้ได้กับ Debian เช่นเดียวกับอนุพันธ์ Debian อื่น ๆ ชิ้นส่วนที่ขาดหายไปคือสิ่งที่ต้องทำเมื่อการค้นหา 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

นี่จะให้แพคเกจ deb ที่คุณสามารถติดตั้งเพื่อรับ Some :: Random :: Module หนึ่งในผลประโยชน์ที่ยิ่งใหญ่ที่นี่คือหน้าคนและสคริปต์ตัวอย่างนอกเหนือจากตัวโมดูลเองจะอยู่ในตำแหน่งที่คุณเลือก ถ้า distro ออกมาพร้อมกับแพ็คเกจอย่างเป็นทางการสำหรับ Some :: Random :: Module เวอร์ชั่นใหม่กว่านั้นมันจะถูกติดตั้งโดยอัตโนมัติเมื่อคุณอัพเกรด apt-get


7

ตอบแล้วและตอบรับแล้ว - แต่อย่างไรก็ตาม:

IMHO วิธีที่ง่ายที่สุดในการติดตั้งโมดูล CPAN (บนระบบยูนิกซ์เช่นเดียวกับระบบและไม่มีความคิดเกี่ยวกับ wondows) คือ:

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));"

น่าเสียดายที่ผลตอบแทนนี้: ไม่สามารถหา CPAN.pm ใน @INC (คุณอาจต้องติดตั้งโมดูล CPAN) (@INC ประกอบด้วย: / etc / perl
IgorGanapolsky

4

บน Ubuntu โมดูลส่วนใหญ่จะได้รับการบรรจุแล้วดังนั้นการติดตั้งนั้นเร็วกว่าระบบอื่น ๆ ส่วนใหญ่ที่ต้องคอมไพล์

หากต้องการติดตั้ง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

2 วิธีที่ฉันรู้:

ใช้ PPM:

ด้วยWindows (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)

พิมพ์ h เพื่อรับรายการคำสั่งสำหรับ cpan


1
นอกจากนี้คุณยังสามารถพูดว่า "$ cpan Foo :: Bar" เพื่อติดตั้งโดยตรงจากบรรทัดคำสั่ง ไม่จำเป็นต้องใช้เปลือกแบบหนึ่งซับหรือ CPAN ที่สวยงาม :)
brian d foy


3

บนFedora LinuxหรือEnterprise Linux, yumนอกจากนี้ยังมีแทร็ค Perl อ้างอิงห้องสมุด ดังนั้นถ้าโมดูล perl พร้อมใช้งานและบางแพ็กเกจ rpm เอ็กซ์พอร์ตการพึ่งพานั้นมันจะติดตั้งแพ็กเกจที่เหมาะสมสำหรับคุณ

yum install 'perl(Chocolate::Belgian)'

(แพ็คเกจ perl-Chocolate-Belgian Belgian หรือแม้กระทั่ง ChocolateFactory package)


3

วิธีที่ง่ายที่สุดสำหรับฉันคือ:

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

a) การตรวจสอบการอ้างอิงซ้ำ / การแก้ไข / การติดตั้งแบบอัตโนมัติซ้ำ

b) เป็น shell onliner ซึ่งเหมาะสำหรับการติดตั้งสคริปต์


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 และการกำหนดค่าก่อนหน้านี้urllistเพื่อใช้ http URL (เช่นhttp://www.cpan.org/ ) ซึ่งอนุญาตการโจมตี MITM จึงไม่ปลอดภัย นี่คือสิ่งที่ใช้ในการดาวน์โหลดCHECKSUMSไฟล์เพื่อที่จะต้องเปลี่ยนเป็น URL ที่ปลอดภัย (เช่นhttps://www.cpan.org/ )

ดังนั้นหลังจากรัน cpan และยอมรับการกำหนดค่าเริ่มต้นคุณต้องแก้ไขMyConfig.pmไฟล์ที่สร้างขึ้น(พา ธ เต็มคือเอาต์พุต) ด้วยวิธีต่อไปนี้ แทนที่

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

โดย

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

หมายเหตุ: https ไม่เพียงพอ คุณต้องมีเว็บไซต์ที่คุณสามารถไว้วางใจได้ ดังนั้นระวังถ้าคุณต้องการเลือกกระจกโดยพลการ

จากนั้นคุณสามารถใช้cpanวิธีปกติ

รายงานข้อผิดพลาดของฉันใน rt.cpan.org เกี่ยวกับ URL ที่ไม่ปลอดภัย


" cpan.org " ไม่ถูกเปลี่ยนเส้นทางไปยัง " cpan.org " หรือไม่
Dave Everitt

1
@DaveEveritt การเปลี่ยนเส้นทางจาก http ไปยัง https มีประโยชน์สำหรับความเป็นส่วนตัวเท่านั้นเช่นกับคนที่สามารถดูการถ่ายโอนข้อมูลบนเครือข่ายได้เท่านั้น แต่ถ้าผู้โจมตีควบคุมเครือข่าย (เช่นฮอตสปอต Wi-Fi สาธารณะหรือเครือข่ายท้องถิ่นไม่ได้ป้องกัน) เป็นโจมตีคน-in-the-กลางอาจจะเป็นไปได้และโจมตีจะใช้เซิร์ฟเวอร์ของตัวเอง (ไม่ชัดhttps://www.cpan.org/)
vinc17



1

ดูเหมือนว่าคุณได้รับคำตอบแล้ว แต่ฉันคิดว่าฉันจะพูดสอดนี่คือสิ่งที่ฉันทำในสคริปต์บางอย่างบน Ubuntu (หรือเซิร์ฟเวอร์เดเบียน)

#!/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.