मैं गैर-रूट उपयोगकर्ता के रूप में CPAN का उपयोग कैसे कर सकता हूं?


81

मैं एक साझा सर्वर पर पर्ल मॉड्यूल स्थापित करना चाहता हूं, जिस पर मेरे पास रूट एक्सेस नहीं है। मैं यह कैसे कर सकता हूँ? उन्हें CPAN का एक पुराना संस्करण भी प्रतीत होता है (यह कमांड चलाते समय इसके बारे में शिकायत करता है), क्या रूट एक्सेस की आवश्यकता के बिना CPAN कमांड का उपयोग मेरे खाते से किया जा सकता है?


जवाबों:


139

अब तक का सबसे आसान तरीका मुझे कहना है

wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

यह माना जाता है कि आपका प्रोफ़ाइल नाम है .profile, आपको इसे बदलने की आवश्यकता हो सकती है .bash_profile,.bashrc आदि उसके बाद आप कह कर मॉड्यूल स्थापित कर सकते हैं

cpanm Module::Name

और बस उन्हें उसी तरह से उपयोग करें जैसे आप रूट डायरेक्टरी में स्थापित किए गए थे।


निम्न आदेश क्या करते हैं, इसका संक्षिप्त विवरण है।

wget -O- http://cpanmin.usके नवीनतम संस्करण को लाती है cpanmऔर उस पर प्रिंट करती है, STDOUTजिसे बाद में पाइप किया जाता है perl - -l ~/perl5 App::cpanminus local::lib। पहले प्रोग्राम के चालू होने की उम्मीद करना -बताता perlहै STDIN, यह हमारे द्वारा डाउनलोड किए perlगए संस्करण को चलाता है cpanmperlबाकी तर्कों को पास करता है cpanm-l ~/perl5तर्क कहता है cpanmजहां पर्ल मॉड्यूल स्थापित करने के लिए, और अन्य दो तर्क स्थापित करने के लिए दो मॉड्यूल हैं। [App::cpanmins] 1 वह पैकेज है जो इंस्टॉल करता है cpanmlocal::libएक सहायक मॉड्यूल है जो स्थानीय निर्देशिका में मॉड्यूल चलाने के लिए आवश्यक पर्यावरण चर का प्रबंधन करता है।

उन मॉड्यूल को स्थापित करने के बाद हम चलाते हैं

eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`

स्थानीय मॉड्यूल और फिर उपयोग करने के लिए आवश्यक पर्यावरण चर सेट करने के लिए

echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile

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

echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile

उम्मीद है कि आदमी अपने स्थानीय मॉड्यूल के लिए आदमी पृष्ठों को खोजने के लिए कारण होगा।


Cpanminus के लिए +1 ... इसका उपयोग कभी नहीं किया जा सकता है इसलिए मुझे ऐसा महसूस नहीं हो सकता है कि मुझे इसकी सिफारिश करनी चाहिए, लेकिन मुझे यह पसंद है कि मैंने एसओ पर अब तक जो देखा है
DVK

7
यह मेरे लिए उत्कृष्ट काम कर रहा है। आपके ~ / .profile (या जो भी) में पहले से मौजूद किसी भी मौजूदा PERL5LIB पर्यावरण चर को निकालने के लिए बस एक छोटा सा नोट। अन्यथा स्थानीय :: पहले कमांड को चलाने के दौरान lib स्थापित करने में विफल हो जाएगा।
जुआन ए। नवारो

@ जुआननवर अच्छा बिंदु, मैं इसे नई स्थापित मशीनों पर स्थापित करना चाहता हूं, इसलिए मैं उस स्थिति में नहीं चलता।
चास।

कर्ल के बजाय wget का उपयोग करने के लिए महान उदाहरण - कई सिस्टम डिफ़ॉल्ट रूप से कर्ल के साथ नहीं आते हैं हालांकि वे wget करते हैं, इसलिए यह उन लोगों के लिए मददगार है जो नए पैकेजों को स्थापित करने के लिए रूट नहीं हैं।
एंड्रयूज 16

1
@HielkeWalinga बाल प्रक्रियाएं मूल प्रक्रियाओं के वातावरण को संशोधित नहीं कर सकती हैं। , जैसे आदेशों इस से निपटने के लिए perl -I ~/perl5/lib/perl5 -Mlocal::libया ssh-agentएक माता पिता प्रक्रिया प्रिंट आउट आदेशों की जरूरत जनक प्रक्रिया में चलाने के लिए के लिए सेट वातावरण चर करने के लिए कि जरूरत है और फिर आप evalउन्हें। evalहालांकि आपको वास्तव में उनकी आवश्यकता नहीं है । आप कह सकते हैं perl -I ~/perl5/lib/perl5 -Mlocal::lib > /tmp/commands; source /tmp/commands, लेकिन eval मेथड क्लीनर है (सफाई के लिए कोई फाइल नहीं है या गलती से ओवरराइट हो गया है)।
चास। ओवेन्स

12

http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root

http://novosial.org/perl/life-with-cpan/non-root/

निर्देशों के दोनों सेटों में मुख्य कदम में स्थानीय :: कामगार मॉड्यूल शामिल हैं

AFAIK, CPAN लॉजिक पर्ल मॉड्यूल (CPAN.pm) में निहित है, जिसका अर्थ है कि आप अपने स्थानीय निर्देशिका में नए को आसानी से स्थापित कर सकते हैं जैसा कि आप किसी अन्य पर्ल मॉड्यूल के साथ करेंगे।


इसके अलावा, एक बार जब आप अपने मॉड्यूल को गैर-मानक स्थान पर स्थापित करते हैं, तो गैर-मानक स्थानों से लोडिंग लाइब्रेरी पर इन दो प्रश्नों की जांच करें (कुछ जानकारी पहले से ही ऊपर दिए गए लिंक में उपलब्ध है):

एक पर्ल प्रोग्राम को कैसे पता चलता है कि पर्ल के मॉड्यूल वाली फाइल को कहां खोजना है?

पर्ल का @INC का निर्माण कैसे किया जाता है? (उर्फ पेरल मॉड्यूल की खोज के लिए प्रभावित करने के सभी तरीके क्या हैं?)


प्रकटीकरण - मैंने इस उत्तर में जुड़े SO प्रश्नों के दोनों को अधिकृत किया।
DVK

2
CPAN से मॉड्यूल स्थापित करने के लिए कम से कम चार अलग-अलग तरीके हैं: हाथ से, CPAN मॉड्यूल (और इसके कमांडलाइन समतुल्य cpan), CPANPLUSमॉड्यूल (और इसके कमांडलाइन समतुल्य cpanp), और नए ऐप :: cpanminus वितरण जो इंस्टॉल करता है cpanm। इनमें से, मुझे cpanmस्थापित करने और उपयोग करने में सबसे आसान लगता है। cpanऔर cpanpडिफ़ॉल्ट रूप से स्थापित हैं, लेकिन सही ढंग से काम करने के लिए महत्वपूर्ण सेटअप की आवश्यकता होती है।
चास।

404: इस सर्वर पर अनुरोधित URL / लेखन / लेख / इंस्टॉल-पर्ल-मॉड्यूल-बिना-रूट नहीं मिला।
harschware

6

पूर्णता के लिए, यह cpanmOSX पर इंस्टॉलेशन प्रक्रिया है यदि आप अपना perl5अंडर रखना चाहते हैं ~/Library

curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib
eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`
echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile

2

यदि आप cpanminus- स्थापित मॉड्यूल के लिए मानव पृष्ठों को पढ़ने में सक्षम होना चाहते हैं, तो आपको यह भी सुनिश्चित करना चाहिए कि चुने गए लाइब्रेरी पथ का सही उपनिर्देशिका MANPATH में है। तो cpanm की स्थापना प्रक्रिया को दर्शाने वाले उपरोक्त समाधान के लिए निम्नलिखित अतिरिक्त कमांड की आवश्यकता है:

 export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile

0

हम पिछले 6 महीनों के दौरान निम्नलिखित फंक का उपयोग 20 से अधिक तैनाती में सफल रहे हैं , जो कि मुख्य रूप से प्रावधान के रूप में बुलाए गए हैं ... प्रयोग करने योग्य बैश स्क्रिप्ट:

 #! /usr/bin/env bash                                                                                                                                                     │··  
                                                                                                                                                                           │··
  # a bash wrapper for check-installing required perl modules as non-root  
main(){                                                                                                                                                                  │··
     doSetVars                                                                                                                                                             │··
     doCheckInstallPreReqs                                                                                                                                                 │··
     perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t                                                                                                                          │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  doSetVars(){                                                                                                                                                             │··
     #set -x                                                                                                                                                               │··
     umask 022    ;                                                                                                                                                        │··
     set -u -o pipefail                                                                                                                                                    │··
     run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0")                                                     │··
     export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../..                                                                                                                  │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  doCheckInstallPreReqs(){                                                                                                                                                 │··
     eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`                                                                                                                         │··
     perl -e '                                                                                                                                                             │··
        use JSON ;                                                                                                                                                         │··
        use Data::Printer;                                                                                                                                                 │··
        use Test::Most ;                                                                                                                                                   │··
        use Test::Mojo;                                                                                                                                                    │··
        use Data::Printer ;                                                                                                                                                │··
        use FindBin;                                                                                                                                                       │··
        use JSON::Parse ;                                                                                                                                                  │··
        use IPC::System::Simple ;                                                                                                                                          │··
        use Mojolicious ;                                                                                                                                                  │··
     ' || {                                                                                                                                                                │··
           curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib                                                                                         │··
           eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`                                                                                                                   │··
           echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc                                                                                               │··
           cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)                                                                         │··
           export PERL_MM_USE_DEFAULT=1                                                                                                                                    │··
           cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \                                                                              │··
              IPC::System::Simple                                                                                                                                          │··
           sudo curl -L cpanmin.us | perl - Mojolicious                                                                                                                    │··
     }                                                                                                                                                                     │··
                                                                                                                                                                           │··
  }                                                                                                                                                                        │··
                                                                                                                                                                           │··
  main
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.