ฉันได้รับข้อผิดพลาดนี้:
Can't locate Foo.pm in @INC
มีวิธีที่ง่ายกว่าในการติดตั้งกว่าการดาวน์โหลด, ไม่เปิดเผย, การสร้างและอื่น ๆ ?
cpan
เกี่ยวกับการใช้งานของ
ฉันได้รับข้อผิดพลาดนี้:
Can't locate Foo.pm in @INC
มีวิธีที่ง่ายกว่าในการติดตั้งกว่าการดาวน์โหลด, ไม่เปิดเผย, การสร้างและอื่น ๆ ?
cpan
เกี่ยวกับการใช้งานของ
คำตอบ:
บน 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 เป็นแพคเกจจำนวนมาก
apt-cache search 'perl$'
pacman -Ss '^perl-'
dev-perl
คุณควรเสมอชอบพวกเขาในขณะที่คุณได้รับประโยชน์จาก (ปลอดภัย) อัตโนมัติการปรับปรุงและความสะดวกของการกำจัด นี่อาจเป็นเรื่องยุ่งยากด้วยเครื่องมือcpanเอง
สำหรับ Gentoo มีเครื่องมือที่ดีที่เรียกว่าg-cpanซึ่งสร้าง / ติดตั้งโมดูลจาก CPAN และสร้างแพ็คเกจ Gentoo ( ebuild ) สำหรับคุณ
ppm
ใช้เครื่องหมายขีดคั่น-
เนื่องจากคุณระบุการกระจายที่คุณต้องการติดตั้งซึ่งมีความซื่อสัตย์มากกว่า ตัวอย่างเช่นถ้าคุณใช้cpan
ในการติดตั้งLWP
, LWP::Simple
หรือLWP::UserAgent
มันจะติดตั้งกระจายlibwww-perl
สำหรับคุณ การแจกแจงส่วนใหญ่มีโมดูลเดียวที่มีชื่อเทียบเท่า แต่มีข้อยกเว้นหลายประการเช่นนั้น
ลองใช้แอพ :: cpanminus :
# cpanm Chocolate::Belgian
เหมาะสำหรับการติดตั้งสิ่งของ มันไม่มีฟังก์ชั่นการทำงานที่ซับซ้อนมากขึ้นของ CPAN หรือ CPANPLUS ดังนั้นมันจึงใช้งานง่ายโดยให้คุณรู้ว่าโมดูลใดที่คุณต้องการติดตั้ง หากคุณยังไม่มี cpanminus ให้พิมพ์:
# cpan App::cpanminus
เพื่อติดตั้ง
นอกจากนี้ยังสามารถติดตั้งได้โดยไม่ต้องใช้ cpan เลย ขั้นตอนการบูตพื้นฐานคือ
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
สำหรับข้อมูลเพิ่มเติมไปที่หน้า App :: cpanminus และดูที่หัวข้อการติดตั้ง
cpan
เพื่อติดตั้งApp::cpanminus
ค่อนข้างแปลก คำแนะนำในการติดตั้งปกตินั้นเกี่ยวข้องกับขั้นตอนการบูตสแตรปในการดาวน์โหลดส่วนหนึ่งจากcpanmin.usและการใช้เพื่อติดตั้งส่วนที่เหลือ สิ่งนี้จะหลีกเลี่ยงการกำหนดค่าcpan
และการสร้าง.cpan
ไดเรกทอรีที่ไม่มีประโยชน์ (หลังจากนั้น)
cpanminus
จากเทอร์มินัล ฉันพบว่าcpanm
ดีกว่าcpan
เพราะมันไม่ได้ใส่บันทึกข้อผิดพลาดบนหน้าจอแทนที่จะเก็บไว้ในไฟล์บันทึกชั่วคราวและให้เส้นทางในกรณีที่เกิดข้อผิดพลาด
ฉันสังเกตคนบางคนแนะนำ cpan หนึ่งรันภายใต้ sudo ที่เคยมีความจำเป็นต้องติดตั้งลงในไดเรกทอรีระบบ แต่รุ่นที่ทันสมัยของเปลือก CPAN ช่วยให้คุณสามารถกำหนดค่าให้ใช้ sudo เพียงสำหรับการติดตั้ง สิ่งนี้ปลอดภัยกว่ามากเพราะหมายความว่าการทดสอบจะไม่ทำงานเหมือนราก
หากคุณมี CPAN เชลล์เก่าเพียงแค่ติดตั้ง cpan ใหม่ ("ติดตั้ง CPAN") และเมื่อคุณโหลดเชลล์ใหม่มันควรแจ้งให้คุณกำหนดค่าคำสั่งใหม่เหล่านี้
ทุกวันนี้เมื่อฉันอยู่ในระบบที่มี CPAN เก่าสิ่งแรกที่ฉันทำคืออัปเดตเชลล์และตั้งค่าให้ทำเช่นนี้เพื่อให้ฉันสามารถทำงาน cpan ส่วนใหญ่เป็นผู้ใช้ปกติ
นอกจากนี้ผมขอขอแนะนำให้ผู้ใช้ Windows ตรวจสอบสตรอเบอร์รี่ Perl นี่เป็นรุ่นของ Perl ที่มาพร้อมกับเชลล์ CPAN ที่กำหนดค่าไว้ล่วงหน้าและคอมไพเลอร์ นอกจากนี้ยังมีโมดูล Perl ที่ยากต่อการคอมไพล์ด้วยการพึ่งพาไลบรารี C ภายนอกโดยเฉพาะอย่างยิ่ง XML :: Parser ซึ่งหมายความว่าคุณสามารถทำสิ่งเดียวกันกับผู้ใช้ Perl รายอื่นทุกครั้งเมื่อพูดถึงการติดตั้งโมดูลและสิ่งต่าง ๆ มักจะ "ทำงานได้" บ่อยครั้งมากขึ้น
install CPAN
จากที่ไหน $sudo apt-get install cpan
?
หากคุณอยู่บน Ubuntu และคุณต้องการติดตั้งโมดูล perl ล่วงหน้า (เช่น geo :: ipfree) ลองทำสิ่งนี้:
$ apt-cache การค้นหาตำแหน่งทางภูมิศาสตร์ :: ipfree libgeo-ipfree-perl - ค้นหาประเทศของที่อยู่ ip โมดูล Perl $ sudo apt-get install libgeo-ipfree-perl
มีคนสองคนพูดถึงยูทิลิตี้ 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.
sudo perl -MCPAN -e 'install Foo'
โปรดดูเพิ่มเติมที่ใช่แม้คุณสามารถใช้ CPANได้ มันแสดงให้เห็นว่าคุณสามารถใช้ CPAN ได้อย่างไรโดยไม่ต้องมีการเข้าถึงรูทหรือ sudo
อ็อตโตทำคำแนะนำที่ดี สิ่งนี้ใช้ได้กับ 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
ตอบแล้วและตอบรับแล้ว - แต่อย่างไรก็ตาม:
IMHO วิธีที่ง่ายที่สุดในการติดตั้งโมดูล CPAN (บนระบบยูนิกซ์เช่นเดียวกับระบบและไม่มีความคิดเกี่ยวกับ wondows) คือ:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
ข้างต้นคือการติดตั้ง "ศูนย์การกำหนดค่าโมดูล CPAN ติดตั้ง" cpanm
ที่เรียกว่า (อาจใช้เวลาหลายนาทีในการติดตั้ง - ไม่ทำให้กระบวนการหยุดชะงัก)
และหลัง - เพียง:
cpanm Foo
cpanm Module::One
cpanm Another::Module
คำแนะนำมากมายสำหรับCPAN.pm
สิ่งที่ดี แต่ถ้าคุณใช้Perl 5.10
แล้วคุณก็จะได้รับการเข้าถึงแบบCPANPLUS.pm
ที่CPAN.pm
ดีกว่า
และแน่นอนว่ามีให้CPAN
สำหรับผู้ที่ยังใช้ Perl รุ่นเก่า ทำไมไม่ลอง:
$ cpan CPANPLUS
เกิดขึ้นหลายครั้งที่คำสั่ง cpan install ล้มเหลวด้วยข้อความเช่น "ทำให้การทดสอบกลับมามีสถานะไม่ดีไม่ติดตั้งโดยไม่มีแรง"
ในกรณีดังต่อไปนี้เป็นวิธีการติดตั้งโมดูล:
perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"
บน Ubuntu โมดูลส่วนใหญ่จะได้รับการบรรจุแล้วดังนั้นการติดตั้งนั้นเร็วกว่าระบบอื่น ๆ ส่วนใหญ่ที่ต้องคอมไพล์
หากต้องการติดตั้งFoo::Bar
ที่พรอมต์คำสั่งเช่นคุณมักจะทำ:
sudo apt-get install libfoo-bar-perl
น่าเสียดายที่บางโมดูลไม่ปฏิบัติตามหลักการตั้งชื่อนั้น
แม้มันควรจะทำงาน:
cpan -i module_name
ใช้คำสั่ง 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
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
ใน Fedora คุณสามารถใช้
# yum install foo
ตราบใดที่ Fedora มีแพ็คเกจที่มีอยู่สำหรับโมดูล
บนFedora Linux
หรือEnterprise Linux
, yum
นอกจากนี้ยังมีแทร็ค Perl อ้างอิงห้องสมุด ดังนั้นถ้าโมดูล perl พร้อมใช้งานและบางแพ็กเกจ rpm เอ็กซ์พอร์ตการพึ่งพานั้นมันจะติดตั้งแพ็กเกจที่เหมาะสมสำหรับคุณ
yum install 'perl(Chocolate::Belgian)'
(แพ็คเกจ perl-Chocolate-Belgian Belgian หรือแม้กระทั่ง ChocolateFactory package)
วิธีที่ง่ายที่สุดสำหรับฉันคือ:
PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'
a) การตรวจสอบการอ้างอิงซ้ำ / การแก้ไข / การติดตั้งแบบอัตโนมัติซ้ำ
b) เป็น shell onliner ซึ่งเหมาะสำหรับการติดตั้งสคริปต์
หากคุณต้องการใส่โมดูลใหม่ลงในตำแหน่งที่กำหนดเองซึ่งเชลล์ cpan ของคุณไม่ได้ถูกกำหนดค่าให้ใช้บางทีอาจเป็นไปได้ว่าสิ่งต่อไปนี้จะเป็นประโยชน์
#wget <URL to the module.tgz>
##unpack
perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install
บางครั้งคุณสามารถใช้yum search foo
เพื่อค้นหาโมดูลสัมพันธ์ perl จากนั้นใช้yum install xxx
เพื่อติดตั้ง
โซลูชันที่ปลอดภัย
คำตอบมากมายพูดถึงการใช้งานcpan
ยูทิลิตี้ (ซึ่งใช้CPAN.pm
) โดยไม่มีคำว่าปลอดภัย ตามค่าเริ่มต้นแล้วCPAN
2.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 ที่ไม่ปลอดภัย
https://www.cpan.org/
)
บน Windows ที่มีการกระจาย ActiveState ของ Perl ให้ใช้คำสั่งppm
เพียงดำเนินการcpan Foo::Bar
บนเชลล์จะตอบสนองวัตถุประสงค์
ดูเหมือนว่าคุณได้รับคำตอบแล้ว แต่ฉันคิดว่าฉันจะพูดสอดนี่คือสิ่งที่ฉันทำในสคริปต์บางอย่างบน 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";
}
}
มันใช้งานได้ดีสำหรับฉันบางทีอาจมีบางอย่างที่นี่ที่คุณสามารถใช้ได้