ฉันจะบอกให้ CPAN ติดตั้งการอ้างอิงทั้งหมดได้อย่างไร


113

ฉันจะบอกให้ CPAN ติดตั้งการอ้างอิงทั้งหมดได้อย่างไร

ฉันลองตั้งค่าสิ่งเหล่านี้ในcpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

ฉันยังต้องตอบว่า "y" สองสามครั้ง (แต่น้อยกว่าที่เคยรู้สึก)

มีวิธีที่จะทำให้ดำเนินการติดตั้งได้เสมอหรือไม่? ฉันต้องการที่จะทำให้มันไม่ต้องใส่

ดูเหมือนว่าฉันต้องการตั้งค่าสถานะไว้วางใจ CPAN เสมอว่าทำในสิ่งที่ถูกต้องและถ้ามันแนะนำคำตอบฉันก็อยากจะทำตามนั้น (มักจะตีEnterเมื่อถามอะไรบางอย่าง)


1
บางทีฉันควรเพิ่มคุณสมบัติให้กับสคริปต์ cpan ของฉันเพื่อตั้งค่าตัวแปรสภาพแวดล้อมการติดตั้งอัตโนมัติตามการตั้งค่า CPAN.pm ดูคำตอบของ tsee ซึ่งเป็นอีกครึ่งหนึ่งของปัญหา
brian d foy

คำตอบ:


31

นี่คือซับเดียวที่ทำการเปลี่ยนแปลงเหล่านี้อย่างถาวรรวมถึงการกำหนดค่า CPAN ครั้งแรกอัตโนมัติ:

perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

หรือรวมเข้ากับlocal::libโมดูลสำหรับผู้ใช้ที่ไม่ได้รับสิทธิพิเศษ:

perl -MCPAN -Mlocal::lib=~/perl5 -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

รันก่อนที่จะใช้เชลล์ CPAN หรืออะไรก็ตาม


ไม่เหมือนกับใน @sdf anwer?
filimonov

83

ลองตั้งค่า PERL_MM_USE_DEFAULT ดังนี้:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'

ควรทำให้ CPAN ตอบรับค่าเริ่มต้นของการแจ้งเตือนทั้งหมด


มีวิธีใดบ้างที่จะทำให้สิ่งนี้คงอยู่ดังนั้นคุณสามารถพิมพ์ "install My: Module" ลงใน cpan ทุกครั้งแล้วมันจะจำสิ่งนี้ได้หรือไม่ แก้ไข Config.pm?
Geoff

3
หากคุณใช้ linux ให้เพิ่มบรรทัดexport PERL_MM_USE_DEFAULT=1ใน ~ / .bashrc
anders และ

1
หากคุณได้รับข้อผิดพลาดให้Can't locate object method "install" via package "xxx" at -e line 1.เพิ่ม "+" ไว้ข้างหน้าชื่อโมดูล
Yann Sagon

55

คำตอบล่าสุดและดีที่สุดสำหรับคำถามนี้คือการใช้cpanmแทน (เรียกอีกอย่างว่า App :: cpanminus หรือ cpanminus)!

รายละเอียด

cpanminus เป็นสคริปต์สำหรับรับแกะสร้างและติดตั้งโมดูลจาก CPAN และไม่ทำอะไรเลย

ไม่ต้องพึ่งพา (สามารถ bootstrap ได้เอง) ต้องการการกำหนดค่าเป็นศูนย์และอยู่คนเดียว เมื่อรันต้องใช้ RAM เพียง 10MB

ในการบูตติดตั้ง:

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

หรือหากคุณใช้perlbrewเพียง

perlbrew install-cpanm

หรือจาก cpan เอง:

cpan install App::cpanminus

จากนั้นติดตั้งโมดูลโดยดำเนินการ (ในฐานะรูทถ้าจำเป็น)

cpanm Foo::Bar

1
ฉันมีปัญหานี้เมื่อฉันใช้งานcpanmดังนั้นการบอกให้ฉันใช้มันไม่ใช่วิธีแก้ปัญหาที่นี่
Reinierpost

3
แทนที่จะเป็นความคิดเห็นที่ไม่ชัดเจนโปรดถามเป็นคำถามใหม่และลิงก์ที่นี่ ฉันสงสัยว่าปัญหาการอนุญาตอาจเป็นปัญหาของคุณ
Joel Berger

บน Ubuntu 18.04 ฉันติดตั้งด้วยsudo apt install cpanminus make.
Pablo A

ลงออกเสียงลงคะแนน ไม่แนะนำให้คนใช้ผลลัพธ์ของ curl
Richard Smith


27

การเปลี่ยนพารามิเตอร์ต่อไปนี้ที่ด้านบนของ prerequisites_policy ดังต่อไปนี้

cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit

การดำเนินการนี้จะเปลี่ยนจาก "ถาม / ใช่" เป็น "ใช่" และหยุดถามคุณ


ขอบคุณ! ฉันต้องการสองตัวเลือกนี้เพื่อที่จะไม่ถามฉันซ้ำแล้วซ้ำอีก!
Dat TT

โปรดทราบว่าค่าเหล่านี้เป็นค่าเริ่มต้นสำหรับการตั้งค่าเหล่านี้
ikegami


6

ชุด

prerequisites_policy

ในการกำหนดค่า

ดูตัวแปร Config


2
ข้อความแจ้งเกี่ยวข้องกับการดาวน์โหลดแหล่งที่มาของโมดูลหรือไม่ ในกรณีนี้โปรดดูตัวเลือกconnect_to_internet_ok มิฉะนั้นโปรดแจ้งให้เราทราบว่ามีการแจ้งเตือนอื่นใดที่คุณพยายามหลีกเลี่ยง
Sinan Ünür

โดยพื้นฐานแล้วสิ่งสุดท้ายเหล่านี้คือ "โมดูลเสริม"
Nifle

ปัญหาคือสิ่งที่ติดตั้งเองโดยอัตโนมัติ CPAN.pm ไม่มีโอกาสจัดการกับสิ่งนั้น ดูคำตอบของ tsee
brian d foy

1
ตอนนี้ลิงค์ดูเหมือนจะตายแล้ว
OrangeDog

3

โดยส่วนตัวแล้วฉันได้ลองเพียงสองสามครั้งเพื่อแก้ไขการตั้งค่าด้วยวิธีนั้นและพบว่ามันง่ายกว่าที่จะวางลงในCPAN.pmเชลล์โดยcpanไม่มีข้อโต้แย้งจากนั้นกำหนดค่าCPAN.pmจากพรอมต์แบบโต้ตอบ:

$ cpan
cpan> o conf init

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


initคุณสามารถส่งผ่านไปยังการตั้งค่าเฉพาะ ตัวอย่างเช่นo conf init prerequisites_policy. ด้วยวิธีนี้คุณไม่ต้องผ่านขั้นตอนการเริ่มต้นที่ยาวนาน แต่ยังคงได้รับคำแนะนำที่เป็นมิตรสำหรับการตั้งค่าที่เป็นปัญหา
ikegami

3

ฉันพบว่านี่เป็นวิธีที่รวดเร็วและน่าเชื่อถือที่สุดในการติดตั้งโมดูล CPAN:

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"

สิ่งนี้ไม่ตอบคำถาม - OP ต้องการวิธีติดตั้งการอ้างอิงโดยอัตโนมัติ / ตอบกลับพร้อมต์โดยอัตโนมัติ
William Turrell

ในความเป็นจริงมันจะติดตั้งการอ้างอิงและตอบสนองต่อการแจ้งเตือนโดยอัตโนมัติ ฉันใช้มันตลอดเวลารวมถึงช่วงเวลานี้ด้วย แต่มีความจำเป็นในการปรับเปลี่ยนเล็กน้อย: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

" yes" ควรจะทำอย่างไร?
Peter Mortensen

2

ฉันเขียนสิ่งนี้เพื่อประโยชน์ของผู้ที่อาจเข้ามาที่หน้านี้เพื่อค้นหาวิธีการติดตั้งการอ้างอิงโมดูลทั้งหมดที่จำเป็นสำหรับสคริปต์ perl เฉพาะ ฉันเขียนสคริปต์สำหรับสิ่งนั้น:

ควรรันเป็น ./installdep.pl yourscript.pl

#!/usr/bin/perl
`sudo apt install cpanminus`;
while (<>) {
    if (/USE /i)
    {
        my $line=$_;
        $line=~ s/\s//g;
        $line=~ /^(.*)\./;
        $line=~ s/\;//;
        $line=~s/^USE//i;
        $line=~s/lib.*//i;
        $line=~s/feature.*//i;
        $line=~s/strict//i;
        $line=~s/warnings//i;
        $line =~ s/^(.*)\(.*/$1/;
        unless ($line eq '') {
        my $cmd='sudo cpanm '.$line;
        print "Installing $line \n";
        open my $cmd_fh, "$cmd |";
        while (<$cmd_fh>) {
          print "$_";
        }
        close $cmd_fh;
        print "\n";
    }
    }
}

สิ่งนี้จะใช้ cpanminus เพื่อติดตั้งการอ้างอิงโมดูลทั้งหมดที่สคริปต์ของคุณต้องการ หากไม่ได้ติดตั้ง cpanm ก็จะทำการติดตั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.