लापता पर्ल मॉड्यूल को स्थापित करने का सबसे आसान तरीका क्या है?


192

मुझे यह त्रुटि मिली:

Can't locate Foo.pm in @INC

क्या इसे डाउनलोड करने, अनटैरिंग करने, बनाने आदि की तुलना में इसे स्थापित करने का एक आसान तरीका है?


1
यदि विचाराधीन मॉड्यूल एक मुख्य मॉड्यूल है, तो सलाह दें कि "पुरालेख / तारकोम का पता नहीं लगा सकते" कैसे ठीक करें
इकेगामी

सुरक्षा के बारे में बहुत सावधान रहें: यह सुनिश्चित करने के लिए क्या आवश्यक है कि मॉड्यूल को संशोधित नहीं किया गया है, किसी विश्वसनीय साइट से सुरक्षित तरीके से डाउनलोड किया जाना चाहिए। के उपयोग के बारे में मेरा उत्तर देखें cpan
vinc17

जवाबों:


226

यूनिक्स पर :

आमतौर पर आप अपने खोल में cpan शुरू करते हैं:

# cpan

और प्रकार

install Chocolate::Belgian

या संक्षिप्त रूप में:

cpan Chocolate::Belgian

विंडोज पर :

यदि आप Windows पर ActivePerl का उपयोग कर रहे हैं, तो PPM (पर्ल पैकेज मैनेजर) में CPAN.pm की समान कार्यक्षमता है।

उदाहरण:

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

देखें कि मैं पर्ल मॉड्यूल कैसे स्थापित करूं? CPAN में अक्सर पूछे जाने वाले प्रश्न

कई वितरण पैकेज के रूप में बहुत सारे पर्ल मॉड्यूल को शिप करते हैं।

  • Debian / Ubuntu: apt-cache search 'perl$'
  • आर्क लिनक्स: pacman -Ss '^perl-'
  • Gentoo: श्रेणी dev-perl

आप चाहिए हमेशा उन्हें पसंद करते हैं, जैसा कि आप स्वत: (सुरक्षा) से लाभ अद्यतन और में आसानी हटाने । यह स्वयं cpan उपकरण के साथ बहुत मुश्किल हो सकता है।

Gentoo के लिए वहाँ एक अच्छा उपकरण कहा जाता है जी cpan बनाता है जो / CPAN से मॉड्यूल स्थापित करता है और एक Gentoo पैकेज (बनाता ebuild आप के लिए)।


14
संक्षिप्त रूप सिर्फ कमांड लाइन से "cpan चॉकलेट :: बेल्जियन" है
brian d foy

3
IIRC नवीनतम ActivePerl में अब कमांड-लाइन पीपीएम नहीं है, यह अब एक फैंसी जीयूआई खोलता है।
केव

6
बस "पीपीएम" जीयूआई खोलता है, लेकिन कमांड के बाद यह कमांड लाइन पर रहता है। तो, "पीपीएम मदद", "पीपीएम इंस्टॉल ...", आदि
बिल रुपेर्ट

ध्यान दें कि पीपीएम मॉड्यूल पथ विभाजक के लिए डैश का उपयोग करता है न कि सामान्य डबल कॉलन। (शायद इसलिए कि कॉलन का मतलब है डॉस में ड्राइव?) जो मुझे कुछ समय के लिए मिला है;)
मैथ्यू लॉक

3
@MatthewLock: ppmहाइफ़न का उपयोग करता है -क्योंकि आप उस वितरण को निर्दिष्ट करते हैं जिसे आप इंस्टॉल करना चाहते हैं, जो कि बहुत अधिक ईमानदार है। उदाहरण के लिए, यदि आप cpanस्थापित करने के लिए उपयोग करते हैं LWP, LWP::Simpleया LWP::UserAgentयह libwww-perlआपके लिए वितरण स्थापित करेगा । वितरण के अधिकांश हिस्से में एक समतुल्य नाम के साथ एक एकल मॉड्यूल होता है, लेकिन इसके कई अपवाद भी हैं
बोरोडिन

65

प्रयास करें अनुप्रयोग :: cpanminus :

# cpanm Chocolate::Belgian

यह सिर्फ सामान स्थापित करने के लिए बहुत अच्छा है। यह CPAN या CPANPLUS की अधिक जटिल कार्यक्षमता प्रदान नहीं करता है, इसलिए इसका उपयोग करना आसान है, बशर्ते आपको पता हो कि आप कौन सा मॉड्यूल इंस्टॉल करना चाहते हैं। यदि आपको पहले से ही cpanminus नहीं मिला है, तो बस टाइप करें:

# cpan App::cpanminus

इसे स्थापित करने के लिए।

बिना cpan का उपयोग किए इसे स्थापित करना भी संभव है। मूल बूटस्ट्रैप प्रक्रिया है,

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

अधिक जानकारी के लिए ऐप :: cpanminus पेज पर जाएं और इंस्टालेशन पर सेक्शन देखें।


7
cpanस्थापित करने के लिए उपयोग करना App::cpanminusथोड़ा अजीब है। सामान्य स्थापित निर्देशों में cpanmin.us से इसका एक हिस्सा डाउनलोड करने और शेष को स्थापित करने के लिए इसका उपयोग करने की बूटस्ट्रैपिंग प्रक्रिया शामिल है । यह cpan(और उसके बाद) बेकार .cpanनिर्देशिका के निर्माण से बचा जाता है ।
चास। ओवेन्स

उबंटू पर, आप बस cpanminusटर्मिनल से इंस्टॉल कर सकते हैं । मुझे cpanmबेहतर लगता है cpanक्योंकि यह स्क्रीन पर त्रुटि लॉग नहीं डालता है बल्कि उन्हें अस्थायी लॉग फ़ाइलों में संग्रहीत करता है और त्रुटियों के मामले में रास्ता देता है।
user13107

आपके आदेश की कोशिश करते समय मुझे यह त्रुटि मिल रही है: @INC में सख्त .pm का पता नहीं लगा सकते (आपको सख्त मॉड्यूल स्थापित करने की आवश्यकता हो सकती है) (@INC में शामिल हैं: / etc / perl
इगोरगानपोलस्की

29

मैं कुछ लोगों को सूडो के तहत एक रन सेप का सुझाव देने पर ध्यान देता हूं। सिस्टम निर्देशिका में स्थापित करने के लिए यह आवश्यक हुआ करता था, लेकिन CPAN शेल के आधुनिक संस्करण आपको इसे केवल इंस्टॉल करने के लिए sudo का उपयोग करने के लिए कॉन्फ़िगर करने की अनुमति देते हैं । यह बहुत सुरक्षित है, क्योंकि इसका मतलब है कि परीक्षण जड़ के रूप में नहीं चलते हैं।

यदि आपके पास पुराना CPAN शेल है, तो बस नया cpan ("CPAN इंस्टॉल करें") स्थापित करें और जब आप शेल को पुनः लोड करते हैं, तो यह आपको इन नए निर्देशों को कॉन्फ़िगर करने के लिए संकेत देना चाहिए।

आजकल, जब मैं एक पुराने सीपीएएन के साथ एक प्रणाली पर हूं, तो पहली चीज जो मैं करता हूं वह शेल को अपडेट करता है और इसे सेट करने के लिए ऐसा करता है ताकि मैं अपने अधिकांश cpan का काम एक सामान्य उपयोगकर्ता के रूप में कर सकूं।

इसके अलावा, मैं दृढ़ता से सुझाव दूंगा कि विंडोज उपयोगकर्ता स्ट्रॉबेरी पर्ल की जांच करते हैं । यह पर्ल का एक संस्करण है जो पहले से कॉन्फ़िगर किए गए सीपीएएन शेल के साथ-साथ एक संकलक के साथ आता है। इसमें उनके बाहरी सी लाइब्रेरी निर्भरता के साथ कुछ कठिन-संकलित पर्ल मॉड्यूल भी शामिल हैं, विशेष रूप से XML :: पार्सर। इसका मतलब है कि आप प्रत्येक अन्य पर्ल उपयोगकर्ता के समान काम कर सकते हैं जब यह मॉड्यूल स्थापित करने की बात आती है, और चीजें बहुत अधिक बार "बस काम" करती हैं।


1
install CPANकहाँ से? $sudo apt-get install cpan?
isomorphismes

1
@ लाओ त्ज़ु: नहीं, क्योंकि सीपीएन पर्ल कोर मॉड्यूल है और यह अलग डीईबी पैकेज के रूप में उपलब्ध नहीं है। मुझे लगता है कि अधिकांश स्थितियों में उपयोग करना और भी बेहतर है App::cpanminus, इसका उपयोग करने के लिए ऐसा आनंद है। फिलिप पॉटर ने यहां अपने जवाब में यह सुझाव दिया और आप इस चास को आजमा सकते हैं ओवेन्स जवाब
wk

25

यदि आप उबंटू में हैं और आप प्री-पैकेज्ड पर्ल मॉड्यूल को स्थापित करना चाहते हैं (उदाहरण के लिए, जियो :: आईपीफ्री) यह कोशिश करें:

    $ apt-cache खोज perl geo :: ipfree
    libgeo-ipfree-perl - एक आईपी पता पर्ल मॉड्यूल का देश है

    $ sudo apt-get install libgeo-ipfree-perl

यह भी खूब रही। धन्यवाद।
इवान एक्स

16

कुछ लोगों ने cpan उपयोगिता का उल्लेख किया है, लेकिन यह केवल एक शेल शुरू करने से अधिक है। बस इसे मॉड्यूल दें जिसे आप इंस्टॉल करना चाहते हैं और इसे काम करने दें।

$prompt> cpan Foo::Bar

यदि आप इसे कोई तर्क नहीं देते हैं तो यह CPAN.pm शेल शुरू करता है। यह यूनिक्स, मैक पर काम करता है, और विंडोज (विशेष रूप से स्ट्राबेरी पर्ल) पर बस ठीक होना चाहिए।

कई अन्य चीजें हैं जो आप cpan उपकरण के साथ भी कर सकते हैं। यहां वर्तमान विशेषताओं का सारांश है (जो CPAN.pm और पर्ल के साथ आने वाले की तुलना में नया हो सकता है):

-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'


शानदार, इसने मेरे लिए अभी-अभी विंडोज पर Git perl के साथ काम किया, लेकिन मुझे GnuWin को पहले स्थापित करना था
wytten


8

ओटो ने एक अच्छा सुझाव दिया । यह डेबियन के लिए भी काम करता है, साथ ही किसी अन्य डेबियन व्युत्पन्न के लिए भी। लापता टुकड़ा क्या करना है जब उपयुक्त-कैश खोज में कुछ नहीं मिलता है।

$ 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

यह आपको एक डिबेट पैकेज देगा जिसे आप कुछ :: रैंडम :: मॉड्यूल प्राप्त करने के लिए इंस्टॉल कर सकते हैं। बड़े लाभों में से एक यहाँ मैन पेज और नमूना स्क्रिप्ट हैं जो मॉड्यूल के अलावा आपके पसंद के स्थान में रखे जाएंगे। यदि डिस्ट्रो कभी-कभी कुछ :: रैंडम :: मॉड्यूल के नए संस्करण के लिए एक आधिकारिक पैकेज के साथ सामने आता है, तो यह स्वतः ही स्थापित हो जाएगा जब आप अपग्रेड प्राप्त करेंगे।


7

पहले से ही जवाब दिया और स्वीकार किए जाते हैं - लेकिन वैसे भी:

IMHO CPAN मॉड्यूल स्थापित करने का सबसे आसान तरीका है (सिस्टम की तरह यूनिक्स पर, और वंडो के बारे में कोई पता नहीं है) है:

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अभी भी पर्ल के पुराने संस्करणों का उपयोग करने वाले लोगों के लिए उपलब्ध है । क्यों नहीं कोशिश करो:

$ cpan CPANPLUS

हे, वह प्यारा है। CPANPLUS के साथ खुद को बदलने के लिए CPAN.pm का उपयोग करें। :)
ब्रायन डी फ़ोय

5

कई बार ऐसा होता है कि cpan इनस्टॉल कमांड मेसेज के साथ फेल हो जाता है जैसे "मेक टेस्ट खराब स्टेटस लौटा था, बिना फोर्स के इंस्टॉल नहीं होगा"

उस मामले में निम्नलिखित मॉड्यूल को स्थापित करने का तरीका है:

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

दुर्भाग्य से यह पैदावार: @INC में CPAN.pm का पता नहीं लगा सकते हैं (आपको CPAN मॉड्यूल स्थापित करने की आवश्यकता हो सकती है) (@INC में शामिल हैं: / etc / perl
IgorGanapolsky

4

उबंटू पर अधिकांश पर्ल मॉड्यूल पहले से ही पैक किए गए हैं, इसलिए इंस्टॉल करना अधिकांश अन्य प्रणालियों की तुलना में बहुत तेज है, जिन्हें संकलित करना है।

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

मुझे ऐप :: cpanminus पसंद है , यह स्वचालित रूप से निर्भरता स्थापित करता है। बस करो

$ cpanm HTML::Parser

3

2 तरीके जो मुझे पता हैं:

पीपीएम का उपयोग:

साथ विंडोज (ActivePerl) मैं का उपयोग किया है पीपीएम

कमांड लाइन प्रकार से पीपीएम। पीपीएम प्रॉम्प्ट पर ...

ppm> install foo

या

ppm> search foo

उपलब्ध फू मॉड्यूल की एक सूची प्राप्त करने के लिए। सभी कमांड के लिए मदद टाइप करें

CPAN का उपयोग:

आप CPAN का इस तरह उपयोग कर सकते हैं ( * निक्स सिस्टम ):

perl -MCPAN -e 'shell'

आपको एक संकेत मिलता है

cpan>

प्रॉम्प्ट पर ...

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

cpan के लिए कमांड की सूची प्राप्त करने के लिए h टाइप करें


1
आप सीधे कमांड लाइन से सीधे इंस्टॉल करने के लिए "$ cpan Foo :: Bar" भी कह सकते हैं। कोई फैंसी वन-लाइनर या सीपीएएन शेल आवश्यक नहीं है। :)
ब्रायन डी Foy


3

पर Fedora Linuxया Enterprise Linux, yumपर्ल लाइब्रेरी निर्भरता को भी ट्रैक करता है। इसलिए, यदि पर्ल मॉड्यूल उपलब्ध है, और कुछ rpm पैकेज उस निर्भरता को निर्यात करता है, तो यह आपके लिए सही पैकेज स्थापित करेगा।

yum install 'perl(Chocolate::Belgian)'

(सबसे अधिक संभावना पर्ल-चॉकलेट-बेल्जियम पैकेज, या यहां तक ​​कि चॉकलेटफैक्टरी पैकेज)


3

मेरे लिए सबसे आसान तरीका यह है:

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

a) स्वचालित पुनरावर्ती निर्भरता का पता लगाना / हल करना / स्थापित करना

b) यह एक शेल ऑनलाइनर है, जो सेटअप-स्क्रिप्ट के लिए अच्छा है


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रिश्तेदार पर्ल मॉड्यूल को खोजने के लिए उपयोग कर सकते हैं , फिर 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सामान्य तरीके से उपयोग कर सकते हैं ।

असुरक्षित URL के बारे में rt.cpan.org पर मेरी बग रिपोर्ट


क्या " cpan.org " को " cpan.org " पर पुनर्निर्देशित नहीं किया जाता है ?
डेव एवरिट

1
@DaveEveritt http से https तक पुनर्निर्देशन केवल गोपनीयता के लिए उपयोगी है, उदाहरण के लिए, किसी ऐसे व्यक्ति के खिलाफ जो केवल नेटवर्क पर डेटा स्थानांतरित कर रहा है। लेकिन अगर कोई हमलावर नेटवर्क को नियंत्रित करता है (उदाहरण के लिए एक सार्वजनिक वाईफाई हॉटस्पॉट या कुछ संरक्षित स्थानीय नेटवर्क नहीं), तो एक मानव-मध्य हमला संभव हो सकता है, और हमलावर अपने स्वयं के सर्वर का उपयोग करेगा (स्पष्ट रूप से नहीं https://www.cpan.org/)।
vinc17



1

ऐसा लगता है कि आपको अपना जवाब मिल गया है, लेकिन मुझे लगा कि मैं इसमें झंकार करूंगा। यही मैं उबंटू (या डेबियन सर्वर) की कुछ स्क्रिप्ट्स में करता हूं।

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

यह मेरे लिए अच्छी तरह से काम करता है, शायद यहाँ कुछ है जो आप उपयोग कर सकते हैं।

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