2017-10-16 15 views
6

मुझे सीपीएएन अपनी फाइलें इंस्टॉल करने का आधिकारिक/व्यापक वर्णन नहीं मिल रहा है। मुझे लगता है कि नियमों का एक सेट होना चाहिए और यह "XYZ निर्देशिका" जितना आसान नहीं है, उदाहरण के लिए, लिनक्स बॉक्स पर एकाधिक उपयोगकर्ता सीपीएएन चला सकते हैं, भले ही एक पर्ल इंस्टॉलेशन हो और फिर भी यह किसी भी तरह काम करता है। तो, ये नियम क्या हैं?सीपीएएन मॉड्यूल कहां स्थापित करता है?

इस प्रश्न का एक दूसरा हिस्सा: PERL5LIB पर्यावरण चर के लिए प्रलेखन का कहना है कि यह "निर्देशिका पुस्तकालयों और वर्तमान निर्देशिका में देखने से पहले पर्ल लाइब्रेरी फ़ाइलों को देखने के लिए निर्देशिकाओं की एक सूची है।"

मुझे लगता है कि सीपीएएन मानक पुस्तकालय स्थान में स्थापित नहीं होता है, क्योंकि संभवतः यह एक विशेष पर्ल संस्करण के लिए तय किया गया है। तो शायद सीपीएएन PERL5LIB में स्थापित हो सकता है?

और आखिरकार, जैसा कि मैंने पहले से ही संकेत दिया है, सीपीएएन इस तथ्य को कैसे संभालता है कि एकाधिक उपयोगकर्ता एक ही पर्ल इंस्टॉलेशन चला रहे हैं? क्षमा करें अगर यह एक अलग सवाल है लेकिन शायद यह संबंधित लगता है।

उत्तर

5

पर्ल स्थापना स्थानों के तीन सेट निर्दिष्ट करता है।

  • perl, पर्ल के साथ ही मॉड्यूल के लिए शामिल मॉड्यूल के लिए।
  • vendor, आपके perl बाइनरी के प्रदाता द्वारा स्थापित मॉड्यूल के लिए।
  • site, cpan का उपयोग कर स्थापित मॉड्यूल के लिए।

इनमें से प्रत्येक सेट कई प्रकार के फाइलों के लिए स्थापना स्थान प्रदान करता है।

     Installation location 
         -------------------------------------------------------- 
Type of file   perl    vendor     site 
---------------------- --------------- --------------------- ------------------- 
Build-specific modules installarchlib installvendorarch  installsitearch 
Modules     installprivlib installvendorlib  installsitelib 
Binary programs   installbin  installvendorbin  installsitebin 
Other programs   installscript installvendorscript installsitescript 
man pages for scripts installman1dir installvendorman1dir installsiteman1dir 
man pages for modules installman3dir installvendorman3dir installsiteman3dir 
html docs for scripts installhtml1dir installvendorhtml1dir installsitehtml1dir 
html docs for modules installhtml3dir installvendorhtml3dir installsitehtml3dir 

आप इन का उपयोग कर किसी भी स्थान के लिए पथ प्राप्त कर सकते हैं निम्नलिखित:

perl -V:{var} 

आप का उपयोग कर इन स्थानों के लिए सभी रास्ते प्राप्त कर सकते हैं निम्नलिखित:

perl -V:'install.*' 

उन हैं डिफ़ॉल्ट संस्थापक [1] द्वारा उपयोग किए जाते हैं। हालांकि, दो सबसे अधिक उपयोग किए जाने वाले इंस्टॉलर उपयोगकर्ता को किसी भी और इन सभी को ओवरराइड करने के लिए इंस्टॉलेशन करने की अनुमति देते हैं। यदि एक गैर-मानक स्थान में कोई मॉड्यूल स्थापित है, तो PERL5LIB का उपयोग perl को मॉड्यूल को कहां ढूंढने के लिए किया जा सकता है।


  1. CPAN मॉड्यूल स्थापित नहीं है। यह एक भंडार है।

    cpan मॉड्यूल स्थापित नहीं करता है। cpan सीपीएएन से वितरण डाउनलोड करें और Makefile.PL और Build.PL के भीतर प्रदान किए गए इंस्टॉलर को चलाता है। (एक ही cpanm और cpanp के लिए चला जाता है।)

    इन लिपियों ज्यादातर का उपयोग ExtUtils::MakeMaker या Module::Build खुद को स्थापित करने के लिए (हालांकि अन्य संस्थापक मौजूद हैं)।

+0

सीपीएएन-द-रिपोजिटरी के अलावा, सीपीएएन-द-पर्ल-मॉड्यूल भी है (जो 'cpan' कमांड का उपयोग करता है)। – melpomene

+0

क्या तालिका कहीं से सोर्स की गई है या क्या आपने इसे स्वयं लिखा है? – simbabque

2

सीपीएएन वास्तव में फ़ाइलों को स्थापित नहीं करता है। यह प्रत्येक वितरण में एम्बेडेड इंस्टॉल स्क्रिप्ट चलाता है, जो तब वास्तविक इंस्टॉल करता है।

ExtUtils::MakeMaker का उपयोग कर वितरणों के लिए, चूक यहाँ प्रलेखित रहे हैं: https://metacpan.org/pod/ExtUtils::MakeMaker#make-install (और INSTALLDIRS का डिफ़ॉल्ट मान site है)। Module::Build के लिए, https://metacpan.org/pod/Module::Build#INSTALL-PATHS देखें।

जब प्रलेखन $Config{foo} या %Config के बारे में बात करता है, तो इसका मतलब वैरिएबल the Config module द्वारा प्रदान किया गया है। का मान perl -V:foo चलाकर भी निरीक्षण किया जा सकता है।

(यदि आपको लगता है यह अनावश्यक रूप से जटिल लगता है, तुम सही हो।)

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

उपयोगकर्ता के होम निर्देशिका में स्थापित करने के लिए ExtUtils :: MakeMaker, मॉड्यूल :: बिल्ड इत्यादि को कॉन्फ़िगर करने के लिए लोग क्या करते हैं। यह पर्यावरण चर के साथ किया जा सकता है। फिर वे इस निर्देशिका को @INC पर जोड़ने के लिए पर्ल को बताते हैं, इसलिए मॉड्यूल वास्तव में पाए जा सकते हैं और लोड हो सकते हैं। यह एक और पर्यावरण परिवर्तनीय, PERL5LIB के साथ किया जाता है। (PERL5LIB स्थापना को प्रभावित नहीं करता है, यह पूरी तरह से लोड होने के लिए उपयोग किया जाता है।)

उपर्युक्त सभी local::lib में स्वचालित और encapsulated है। (। स्थानीय :: lib भी जैसे एक प्रति परियोजना मॉड्यूल उपनिर्देशिका बनाने के लिए इस्तेमाल किया जा सकता है)

CPAN प्रलेखन भी कहते हैं:

CPAN 1.9463 के रूप में, यदि आप लिखने के लिए अनुमति नहीं है डिफ़ॉल्ट perl लाइब्रेरी निर्देशिका, सीपीएएन की कॉन्फ़िगरेशन प्रक्रिया आपको पूछेगी कि क्या आप local::lib बूटस्ट्रैप करना चाहते हैं, जो व्यक्तिगत पर्ल लाइब्रेरी निर्देशिका को आसान बनाता है।


आप (अपने घर निर्देशिका में एक निजी पर्ल स्थापित करने और इस मामले में "प्रणाली" निर्देशिका किसी के साथ साझा नहीं है सिर्फ अपने $HOME के तहत एक और उपनिर्देशिका है और इस प्रकार और कर सकते हैं द्वारा पूरे मुद्दे से बचने कर सकते हैं आपके द्वारा लिखा जाना चाहिए)। यह उदाहरण के साथ बहुत आसान है perlbrew


एक और ध्यान दें: तुम बस PERL5LIB के लिए दस्तावेज़ में एक बग पाया है। "और वर्तमान निर्देशिका" पुराना है: . सुरक्षा कारणों से मॉड्यूल स्थानों की डिफ़ॉल्ट सूची से हटा दिया गया है।

+0

धन्यवाद, यह सहायक है। इसके बारे में: "लोग इसके बजाय क्या करते हैं ExtUtils :: MakeMaker, मॉड्यूल :: बिल्ड इत्यादि को उपयोगकर्ता की होम निर्देशिका में स्थापित करने के लिए कॉन्फ़िगर करना है" क्या स्थानीय :: lib यह अनावश्यक बनाता है? – Stephen

+0

@ स्टीफन वेल, अधिकांश लोग इसे करने के लिए स्थानीय :: lib का उपयोग करते हैं। :-) स्थानीय :: lib कुछ कोर बनाने के लिए बस एक स्वचालित तरीका है और कुछ हद तक पर्यावरण चर सेट करता है। तो हाँ: यदि आप स्थानीय :: lib का उपयोग करते हैं (जादू लाइन को अपने '.bashrc' या समकक्ष में जोड़कर), तो आपको हाथ से कुछ और कॉन्फ़िगर करने की आवश्यकता नहीं है। – melpomene

1

यह एक जटिल सवाल है। आप बता सकते हैं जहां कोर पुस्तकालयों उनमें से एक की जगह की मांग की स्थित हैं:

perldoc -l B 

आपको बता देंगे जहां B कोर मॉड्यूल स्थित है। और आप अलग-अलग परिणामों के साथ दूसरों को आजमा सकते हैं ...

इसके अलावा, perl -V आपको सभी शेल वेरिएबल्स बताएगा जो @INC के मूल्य के साथ महत्वपूर्ण हैं, जहां वे पुस्तकालयों की तलाश करेंगे।

कोर लाइब्रेरी आमतौर पर स्थानीय पुस्तकालयों से विभिन्न स्थानों पर पाए जाते हैं। इसके अलावा, यदि आप perlbrew और local::lib का उपयोग कर रहे हैं तो आपके पास विचार करने के लिए और अधिक चीज़ें हो सकती हैं। PERL5LIB के साथ, शैल चर के संबंध में, आपके पास PERL_LOCAL_LIB_ROOT भी है।

आपके अन्य प्रश्न के संबंध में, मैं कहूंगा कि root लाइब्रेरी सिस्टम-व्यापी स्थापित कर सकता है। किसी भी उपयोगकर्ता के पास उन सभी स्थानीय स्थानों को खोल चर के माध्यम से या कमांड लाइन विकल्प perl -I <lib location> जैसे अन्य माध्यमों या use lib <lib location>; जैसे कोड के भीतर शामिल किया जाएगा।

वहाँ भी perlbrew है कि local::lib के साथ एक विशेषाधिकार रहित उपयोगकर्ता स्थानीय निर्देशिका में पर्ल और पुस्तकालयों स्थापित करने के लिए अनुमति देता है।

सीपीएएन से मॉड्यूल स्थापित करने के तरीकों के बारे में, मेरा पसंदीदा cpanminus है। इसे cpanm <library to install> के साथ बुलाया जाता है। यह कभी विफल नहीं होता है ...

संबंधित मुद्दे