ما هي أسهل طريقة لتثبيت وحدة Perl المفقودة؟

StackOverflow https://stackoverflow.com/questions/65865

  •  09-06-2019
  •  | 
  •  

سؤال

أحصل على هذا الخطأ:

Can't locate Foo.pm in @INC

هل هناك طريقة أسهل لتثبيته من التنزيل أو إلغاء التثبيت أو الإنشاء وما إلى ذلك؟

هل كانت مفيدة؟

المحلول

على يونكس:

عادة تبدأ com.cpan في قوقعتك:

# cpan

واكتب

install Chocolate::Belgian

أو بصيغة مختصرة:

cpan Chocolate::Belgian

على ويندوز:

إذا كنت تستخدم ActivePerl على نظام التشغيل Windows، فإن PPM (مدير حزمة بيرل) لديه الكثير من نفس وظائف CPAN.pm.

مثال:

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

يرى كيف أقوم بتثبيت وحدات بيرل؟ في الأسئلة الشائعة لـ CPAN

تقوم العديد من التوزيعات بشحن الكثير من وحدات Perl كحزم.

  • ديبيان/أوبونتو: apt-cache search 'perl$'
  • آرتش لينكس: pacman -Ss '^perl-'
  • جنتو:فئة dev-perl

يجب دائماً تفضلهم لأنك تستفيد من (الأمان) التلقائي التحديثات وسهولة إزالة.قد يكون هذا أمرًا صعبًا جدًا مع com.cpan الأداة نفسها.

بالنسبة لـ Gentoo هناك أداة جميلة تسمى g-cpan الذي يقوم ببناء/تثبيت الوحدة من CPAN وإنشاء حزمة Gentoo (ebuild) لك.

نصائح أخرى

يحاول التطبيق::cpanminus:

# cpanm Chocolate::Belgian

إنه أمر رائع لمجرد تثبيت الأشياء.فهو لا يوفر أيًا من الوظائف الأكثر تعقيدًا لـ CPAN أو CPANPLUS، لذا فهو سهل الاستخدام، بشرط أن تعرف الوحدة النمطية التي تريد تثبيتها.إذا لم يكن لديك cpanminus بالفعل، فاكتب فقط:

# cpan App::cpanminus

لتثبيته.

ومن الممكن أيضًا تثبيته دون استخدام cpan على الإطلاق.الإجراء الأساسي للتمهيد هو،

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

لمزيد من المعلومات، انتقل إلى صفحة App::cpanminus وانظر إلى القسم الخاص بالتثبيت.

ألاحظ أن بعض الأشخاص يقترحون تشغيل cpan واحدًا تحت Sudo.كان ذلك ضروريًا للتثبيت في دليل النظام، لكن الإصدارات الحديثة من غلاف CPAN تسمح لك بتكوينه لاستخدام Sudo فقط للتثبيت.يعد هذا أكثر أمانًا، لأنه يعني أن الاختبارات لا تعمل كجذر.

إذا كان لديك غلاف CPAN قديم، فما عليك سوى تثبيت cpan الجديد ("تثبيت CPAN") وعند إعادة تحميل الغلاف، يجب أن يطالبك بتكوين هذه التوجيهات الجديدة.

في الوقت الحاضر، عندما أستخدم نظامًا به CPAN قديم، فإن أول شيء أفعله هو تحديث الصدفة وإعدادها للقيام بذلك حتى أتمكن من القيام بمعظم أعمال cpan الخاصة بي كمستخدم عادي.

كما أقترح بشدة أن يقوم مستخدمو Windows بالتحقيق في الأمر الفراولة بيرل.هذه نسخة من Perl تأتي مع غلاف CPAN تم تكوينه مسبقًا بالإضافة إلى مترجم.ويتضمن أيضًا بعض وحدات Perl التي يصعب تجميعها مع تبعيات مكتبة C الخارجية الخاصة بها، ولا سيما XML::Parser.هذا يعني أنه يمكنك القيام بنفس الشيء مثل أي مستخدم آخر لـ Perl عندما يتعلق الأمر بتثبيت الوحدات النمطية، وتميل الأشياء إلى "العمل فقط" في كثير من الأحيان.

إذا كنت تستخدم Ubuntu وتريد تثبيت وحدة Perl المعبأة مسبقًا (على سبيل المثال، Geo::ipfree) فجرّب ما يلي:

    $ apt-cache search perl geo::ipfree
    libgeo-ipfree-perl - A look up country of ip address Perl module

    $ sudo apt-get install libgeo-ipfree-perl

ذكر بعض الأشخاص الأداة المساعدة cpan، ولكنها أكثر من مجرد بدء تشغيل الصدفة.ما عليك سوى إعطائها الوحدات التي تريد تثبيتها والسماح لها بالقيام بعملها.

$prompt> cpan Foo::Bar

إذا لم تعطها أية وسائط، فإنها تبدأ تشغيل shell CPAN.pm.يعمل هذا على أنظمة Unix وMac، ويجب أن يكون جيدًا على أنظمة Windows (خصوصًا Strawberry Perl).

هناك العديد من الأشياء الأخرى التي يمكنك القيام بها باستخدام أداة cpan أيضًا.فيما يلي ملخص للميزات الحالية (والتي قد تكون أحدث من تلك التي تأتي مع CPAN.pm وPerl):

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

sudo perl -MCPAN -e 'install Foo'

انظر أيضا نعم، حتى يمكنك استخدام CPAN.يوضح كيف يمكنك استخدام CPAN دون الحاجة إلى الوصول إلى الجذر أو sudo.

قام أوتو ب اقتراح جيد.يعمل هذا مع دبيان أيضًا، بالإضافة إلى أي مشتق آخر من دبيان.القطعة المفقودة هي ما يجب فعله عندما لا يجد بحث apt-cache شيئًا ما.

$ 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

سيعطيك هذا حزمة deb التي يمكنك تثبيتها للحصول على Some::Random::Module.إحدى الفوائد الكبيرة هنا هي صفحات الدليل ونماذج البرامج النصية بالإضافة إلى الوحدة نفسها التي سيتم وضعها في موقع التوزيعة الذي تختاره.إذا صدرت التوزيعة بحزمة رسمية لإصدار أحدث من Some::Random::Module، فسيتم تثبيتها تلقائيًا عند حصولك على ترقية.

تمت الإجابة عليه بالفعل والإجابة المقبولة - ولكن على أي حال:

IMHO أسهل طريقة لتثبيت وحدات CPAN (على أنظمة تشبه Unix، وليس لدي أي فكرة عن windows) هي:

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

ما ورد أعلاه هو تثبيت "مثبت وحدات CPAN ذات التكوين الصفري" الذي يسمى cpanm.(قد يستغرق التثبيت عدة دقائق - لا تقطع العملية)

وبعد - ببساطة:

cpanm Foo
cpanm Module::One
cpanm Another::Module

الكثير من التوصية ل CPAN.pm, ، وهو أمر رائع، ولكن إذا كنت تستخدم Perl 5.10 ثم يمكنك أيضًا الوصول إلى CPANPLUS.pm وهو مثل CPAN.pm ولكن أفضل.

وبالطبع فهو متاح على CPAN للأشخاص الذين ما زالوا يستخدمون الإصدارات الأقدم من Perl.لماذا لا تحاول:

$ cpan CPANPLUS

يحدث في كثير من الأحيان أن أمر تثبيت cpan يفشل مع ظهور رسالة مثل""جعل الاختبار قد أعاد حالة سيئة، ولن يتم التثبيت بدون استخدام القوة"

في هذه الحالة، فيما يلي طريقة تثبيت الوحدة:

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

في نظام التشغيل ubuntu، تكون معظم وحدات Perl مجمعة بالفعل، لذا يكون التثبيت أسرع بكثير من معظم الأنظمة الأخرى التي يتعين عليها تجميعها.

لتثبيت Foo::Bar في موجه الأوامر على سبيل المثال عادةً ما تقوم بما يلي:

sudo apt-get install libfoo-bar-perl

للأسف لا تتبع جميع الوحدات اصطلاح التسمية هذا.

حتى أنه يجب أن يعمل:

cpan -i module_name

استخدم الأمر 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

2 طرق أعرفها:

استخدام جزء في المليون:

مع شبابيك (ActivePerl) لقد استخدمت جزء في المليون

من سطر الأوامر اكتب جزء في المليون.في موجه جزء في المليون ...

ppm> install foo

أو

ppm> search foo

للحصول على قائمة بوحدات foo المتاحة.يكتب يساعد لجميع الأوامر

استخدام شبكة سي بان:

يمكنك أيضًا استخدام CPAN مثل هذا (* أنظمة لا شيء) :

perl -MCPAN -e 'shell'

يحصل لك موجه

cpan>

عند الطلب ...

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

اكتب h للحصول على قائمة أوامر cpan

على فيدورا يمكنك استخدامه

# yum install foo

طالما أن Fedora لديه حزمة موجودة للوحدة.

على Fedora Linux أو Enterprise Linux, yum يتتبع أيضًا تبعيات مكتبة بيرل.لذا، إذا كانت وحدة Perl متاحة، وتقوم بعض حزم rpm بتصدير تلك التبعية، فسوف تقوم بتثبيت الحزمة المناسبة لك.

yum install 'perl(Chocolate::Belgian)'

(على الأرجح حزمة Perl-Chocolate-Belgian، أو حتى حزمة ChocolateFactory)

أسهل طريقة بالنسبة لي هي:

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

أ) الكشف التلقائي عن التبعية العودية/الحل/التثبيت

ب) إنه برنامج Shell عبر الإنترنت، وهو جيد لنصوص الإعداد

إذا كنت تريد وضع الوحدة الجديدة في موقع مخصص لم يتم تكوين cpan Shell لاستخدامه، فربما يكون ما يلي مفيدًا.

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install

في بعض الأحيان يمكنك استخدام yum search foo للبحث في وحدة Perl النسبية، ثم استخدمها yum install xxx لتثبيت.

في نظام التشغيل Windows المزود بتوزيع ActiveState لـ Perl، استخدم الملف جزء في المليون يأمر.

التنفيذ بكل بساطة cpan Foo::Bar على الصدفة سوف يخدم هذا الغرض.

يبدو أنك قد حصلت بالفعل على إجابتك ولكني اعتقدت أنني سأشارك.هذا ما أفعله في بعض البرامج النصية على Ubuntu (أو خادم دبيان)

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

هذا يعمل بشكل جيد بالنسبة لي، ربما هناك شيء هنا يمكنك استخدامه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top