मैं CPAN को सभी निर्भरताओं को स्थापित करने के लिए कैसे कहूं?


113

मैं CPAN को सभी निर्भरताओं को स्थापित करने के लिए कैसे कहूं?

मैंने इन्हें स्थापित करने की कोशिश की cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

मुझे अभी भी दो बार "वाई" का जवाब देना था (लेकिन ऐसा लगता है कि पहले से कम)।

क्या हमेशा इसे आगे बढ़ाने और स्थापित करने के लिए इसे प्राप्त करने का एक तरीका है? मैं इसे अप्राप्य बनाना चाहता हूं।

ऐसा लगता है कि मैं चाहता हूं कि एक झंडा हमेशा सीपीएन पर भरोसा करे कि वह सही काम करे, और अगर यह कोई जवाब देता है तो मैं उसका पालन करना चाहूंगा (हमेशा Enterजब वह कुछ पूछता है तो हिट होता है)।


1
शायद मैं CPAN.pm सेटिंग के आधार पर ऑटो इंस्टॉल पर्यावरण चर को सेट करने के लिए अपनी cpan स्क्रिप्ट में एक सुविधा जोड़ दूं। Tsee का जवाब देखें, जो समस्या का दूसरा हिस्सा है।
ब्रायन डी फ़ोय

जवाबों:


30

यहां पहली बार 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 एवर के रूप में ही नहीं है?
फाइलमोनोव

83

इस तरह PERL_MM_USE_DEFAULT सेट करने का प्रयास करें:

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

यह CPAN को सभी संकेतों के लिए डिफ़ॉल्ट उत्तर देना चाहिए।


इसे लगातार बनाने का कोई भी तरीका, इसलिए आप हर बार "My: Module" को cpan में टाइप कर सकते हैं और यह इसे याद रखेगा? कॉन्फ़िगर करें।
ज्योफ

3
यदि आप लाइनक्स पर हैं, तो export PERL_MM_USE_DEFAULT=1अपने ~ / .bashrc
andandand

1
यदि आपको कोई त्रुटि मिलती है Can't locate object method "install" via package "xxx" at -e line 1.तो मॉड्यूल नाम से ठीक पहले "+" जोड़ें।
यनगन साग

55

इस प्रश्न का नवीनतम और सबसे बड़ा उत्तर cpanmइसके बजाय (App :: cpanminus या cpanminus के रूप में संदर्भित) का उपयोग करना है!

विवरण

cpanminus CPAN से मॉड्यूल प्राप्त करने, अनपैक करने, बनाने और स्थापित करने के लिए एक स्क्रिप्ट है और कुछ नहीं करता है।

यह निर्भरता मुक्त है (स्वयं बूटस्ट्रैप कर सकता है), शून्य कॉन्फ़िगरेशन की आवश्यकता है, और अकेले खड़ा है। दौड़ते समय, इसमें केवल 10MB RAM की आवश्यकता होती है।

बूटस्ट्रैप के लिए इसे स्थापित करें:

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

या यदि आप perlbrewबस का उपयोग कर रहे हैं

perlbrew install-cpanm

या cpan से ही:

cpan install App::cpanminus

तब से स्थापित मॉड्यूल को क्रियान्वित करके (यदि आवश्यक हो तो रूट के रूप में)

cpanm Foo::Bar

1
जब मैं उपयोग करता हूं तो मुझे यह समस्या होती है cpanm, इसलिए मुझे इसका उपयोग करने के लिए कहना यहां समाधान नहीं है।
रीइनियरियरपोस्ट

3
एक अंधे टिप्पणी के बजाय, कृपया यहां एक नया प्रश्न और लिंक के रूप में पूछें। मुझे संदेह है कि अनुमतियाँ समस्या आपकी समस्या हो सकती है
जोएल बर्जर

उबंटू में 18.04 पर मैंने स्थापित किया sudo apt install cpanminus make
पाब्लो ए

नीचे मतदान। यह अनुशंसा न करें कि लोग कर्ल के आउटपुट को निष्पादित करते हैं।
रिचर्ड स्मिथ

28

यहाँ मैं बहुत यकीन है कि आप के लिए देख रहे हैं:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

निम्न पैरामीटर को prerequisites_policy के शीर्ष पर बदलना।

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

यह इसे "पूछें / हाँ" से "हाँ" में बदल देगा और इसे आपसे पूछना बंद कर देगा।


धन्यवाद! मुझे इन दो विकल्पों की आवश्यकता है ताकि यह मुझसे बार-बार न पूछे!
Dat TT

ध्यान दें कि ये इन सेटिंग्स के लिए डिफ़ॉल्ट मान हैं।
इकेगामी

6

शायद यह ExtUtils से संबंधित है : AutoInstall या मॉड्यूल :: AutoInstall का उपयोग किया जा रहा है। PERL_AUTOINSTALL पर्यावरण चर सेट करने का प्रयास करें। (Cf. उन मॉड्यूल के प्रलेखन।)


6

सेट

prerequisites_policy

विन्यास में।

विन्यास चर देखें ।


2
मॉड्यूल स्रोत डाउनलोड करने से संबंधित संकेत हैं? यदि ऐसा है, तो Connect_to_internet_ok विकल्प देखें । अन्यथा, हमें बताएं कि आप किन अन्य संकेतों से बचने की कोशिश कर रहे हैं।
सिनान Maynür

खैर मूल रूप से, ये आखिरी वाले "वैकल्पिक मॉड्यूल" थे।
निफले

समस्या ऐसी चीजें हैं जो अपने दम पर ऑटो स्थापित करती हैं। CPAN.pm को उस सामान को संभालने का मौका नहीं मिलता है। देखें तीसी का जवाब
ब्रायन डी फॉय

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

यह सवाल का जवाब नहीं देता है - ओपी निर्भरता को स्वचालित रूप से स्थापित करने का एक तरीका चाहता है / स्वचालित रूप से संकेतों का जवाब देता है।
विलियम टरेल

वास्तव में, यह निर्भरता स्थापित करता है और स्वचालित रूप से संकेतों का जवाब देता है। मैं हर समय इसका उपयोग करता हूं, जिसमें यह बहुत ही क्षण भी शामिल है। लेकिन एक छोटे से संशोधन की आवश्यकता है: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
व्लादिमीर Marchenko

क्या yesकरना है?
पीटर मोर्टेंसन

2

मैं इसे उन लोगों के लाभ के लिए लिख रहा हूं जो इस पृष्ठ पर आए होंगे, जो किसी विशेष पर्ल स्क्रिप्ट द्वारा आवश्यक सभी मॉड्यूल निर्भरता को स्थापित करने का तरीका खोज रहे हैं। मैंने इसके लिए एक स्क्रिप्ट लिखी है:

इसे इस रूप में चलाया जाना चाहिए ./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 स्थापित नहीं है, तो वह इसे स्थापित करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.