Eksik bir Perl modülünü kurmanın en kolay yolu nedir?


192

Bu hatayı alıyorum:

Can't locate Foo.pm in @INC

Yüklemenin, indirmekten, untarring, yapımdan, vb.



Güvenlik konusunda çok dikkatli olun: Modüllerin değiştirilmediğinden emin olmak için gerekenler güvenilir bir siteden güvenli bir şekilde indirilmelidir. Bkz Cevabımı kullanımı hakkında cpan.
vinc17

Yanıtlar:


226

Unix'te :

genellikle kabuğunuzda cpan başlatırsınız :

# cpan

ve yazın

install Chocolate::Belgian

veya kısa formda:

cpan Chocolate::Belgian

Windows'ta :

Windows'ta ActivePerl kullanıyorsanız, PPM (Perl Paket Yöneticisi) CPAN.pm ile aynı işleve sahiptir.

Misal:

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

bkz. Perl modüllerini nasıl kurarım? CPAN SSS bölümünde

Birçok dağıtım paket olarak birçok perl modülü gönderiyor.

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo: kategori dev-perl

Otomatik (güvenlik) güncellemelerden ve kaldırma kolaylığından yararlandıkça bunları her zaman tercih etmelisiniz . Bu cpan aracının kendisi ile oldukça zor olabilir .

Gentoo için modülü CPAN'dan oluşturan / yükleyen ve sizin için bir Gentoo paketi ( ebuild ) oluşturan g-cpan adında güzel bir araç var.


14
Kısa form komut satırından sadece "cpan Chocolate :: Belgian" dır :)
brian d foy

3
En son ActivePerl IIRC'de artık komut satırı ppm'si yok, artık süslü bir GUI açıyor.
Kev

6
Sadece "ppm" GUI'yi açar, ancak komutlar tarafından komut satırında kalır. Yani, "ppm yardım", "ppm yükleme ...", vb.
Bill Ruppert

Ppm'nin modül yolu ayırıcısı için olağan çift sütunlar için tire kullandığını unutmayın. (Belki de iki nokta üst üste noktalarının sürücülerde dos demek olduğu için?) Bu beni birkaç kez yakaladı;)
Matthew Lock

3
@MatthewLock: yüklemek istediğiniz dağıtımı belirttiğiniz için ppmtire kullanır , bu da çok daha dürüsttür. Örneğin, yüklemek için kullanırsanız , ya da sizin için dağıtımı yükleyecektir . Dağıtımların çoğunluğu, eşdeğer bir adı olan tek bir modül içerir, ancak bunun gibi birkaç istisna vardır-cpanLWPLWP::SimpleLWP::UserAgentlibwww-perl
Borodin

65

Uygulamayı deneyin :: cpanminus :

# cpanm Chocolate::Belgian

Sadece bir şeyler yüklemek için harika. CPAN veya CPANPLUS'un daha karmaşık işlevlerinden hiçbirini sağlamaz, bu nedenle hangi modülü kurmak istediğinizi bilmeniz koşuluyla kullanımı kolaydır. Henüz cpanminus'unuz yoksa şunu yazın:

# cpan App::cpanminus

yüklemek için.

Ayrıca cpan kullanmadan da kurmak mümkündür. Temel bootstrap prosedürü,

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

Daha fazla bilgi için App :: cpanminus sayfasına gidin ve kurulum bölümüne bakın.


7
cpanYüklemek App::cpanminusiçin kullanmak biraz tuhaf. Normal yükleme talimatları, bir kısmını cpanmin.us'tan indirme ve geri kalanını yüklemek için bunu içeren bir önyükleme prosedürünü içerir . Bu, cpan(bundan sonra) yararsız bir .cpandizinin yapılandırılmasını ve oluşturulmasını önler .
Chas. Owens

Ubuntu'da sadece cpanminusterminalden kurulum yapabilirsiniz . Hata günlüklerini ekrana koymadığı için onları geçici günlük dosyalarında sakladığı ve hata durumunda yol verdiği için cpanmdaha iyi buluyorum cpan.
user13107

Komutunuzu denerken bu hatayı alıyorum: @INC'de katı.pm bulunamıyor (katı modülü yüklemeniz gerekebilir) (@INC şunları içerir: / etc / perl
IgorGanapolsky

29

Ben sudo altında bir çalışma cpan düşündüren bazı millet not. Bu eskiden sistem dizinine kurmak için gerekliydi, ancak CPAN kabuğunun modern sürümleri onu sadece yükleme için sudo kullanacak şekilde yapılandırmanıza izin veriyor . Bu çok daha güvenlidir, çünkü testler kök olarak çalışmaz.

Eski bir CPAN kabuğunuz varsa, yeni cpan'ı ("CPAN'ı yükle") yükleyin ve kabuğu yeniden yüklediğinizde, bu yeni yönergeleri yapılandırmanızı isteyecektir.

Günümüzde, eski bir CPAN ile bir sistemdeyken, yaptığım ilk şey kabuğu güncellemek ve bunu yapmak için ayarlamaktır, böylece cpan işlerimin çoğunu normal bir kullanıcı olarak yapabilirim.

Ayrıca, Windows kullanıcılarının çilek Perl'i araştırmasını şiddetle tavsiye ediyorum . Bu, önceden yapılandırılmış bir CPAN kabuğu ve bir derleyici ile birlikte gelen Perl'nin bir sürümüdür. Ayrıca, harici XML kütüphanesi bağımlılıklarıyla, özellikle XML :: Ayrıştırıcı ile derlenmesi zor Perl modüllerini de içerir. Bu, modülleri kurmak söz konusu olduğunda diğer tüm Perl kullanıcılarıyla aynı şeyi yapabileceğiniz anlamına gelir ve işler daha sık "sadece" işe yarar.


1
install CPANNereden? $sudo apt-get install cpan?
izomorfizmalar

1
@Lao Tzu: hayır, çünkü CPAN Perl çekirdek modülüdür ve ayrı DEB paketi olarak mevcut değildir. Bence çoğu durumda kullanımı daha iyi App::cpanminus, onu kullanmak büyük bir keyif. Philip Potter burada cevabında bunu önerdi ve bu Chas'ı deneyebilirsiniz . Owens cevabı .
hafta

25

Ubuntu üzerindeyseniz ve önceden paketlenmiş perl modülünü kurmak istiyorsanız (örneğin, geo :: ipfree) şunu deneyin:

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl - Bir IP adresi Perl modülü ülkesi

    $ sudo apt-get install libgeo-ipfree-perl

Bu harika. Teşekkür ederim.
Ivan X

16

Birkaç kişi cpan yardımcı programından bahsetti, ama sadece bir kabuk başlatmaktan daha fazlası. Sadece kurmak istediğiniz modülleri verin ve çalışmasına izin verin.

$prompt> cpan Foo::Bar

Eğer herhangi bir argüman vermezseniz, CPAN.pm kabuğunu başlatır. Bu Unix, Mac üzerinde çalışır ve Windows'ta (özellikle Çilek Perl) iyi olmalıdır.

Cpan aracıyla yapabileceğiniz başka şeyler de var. Mevcut özelliklerin bir özeti (CPAN.pm ve perl ile birlikte gelenlerden daha yeni olabilir):

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


Harika, bu benim için şimdi Git perl ile Windows üzerinde çalıştı, ama ilk önce GnuWin make'i kurmak zorunda kaldım
wytten


8

Otto iyi bir öneri yaptı . Bu, Debian ve diğer Debian türevleri için de geçerlidir. Eksik parça apt-cache search bir şey bulamadığında ne yapılacağıdır.

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

Ardından rastgele bir modülünüz olduğunda:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

Bu size Some :: Random :: Module almak için yükleyebileceğiniz bir deb paketi verecektir. Buradaki en büyük faydalardan biri, modülün kendisine ek olarak man sayfaları ve örnek komut dosyaları dağıtımınızın tercih ettiği yere yerleştirilecektir. Distro, Some :: Random :: Module yazılımının daha yeni bir sürümü için resmi bir paketle gelirse, yükseltmeye başladığınızda otomatik olarak yüklenir.


7

Zaten cevaplandı ve yanıtı kabul etti - ama yine de:

IMHO CPAN modüllerini kurmanın en kolay yolu (unix benzeri sistemlerde ve mucizeler hakkında hiçbir fikri yok):

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

Yukarıdaki "sıfır yapılandırma CPAN modülleri yükleyici" denilen yüklüyor cpanm. (Kurulumu birkaç dakika sürebilir - işlemi kırmayın)

ve sonra - basitçe:

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

6

Tavsiye için bir sürü CPAN.pm, bu harika, ama kullanıyorsanız Perl 5.10o zaman da CPANPLUS.pmhangi gibi CPAN.pmama daha iyi erişim var .

Ve elbette, CPANhala Perl'in eski sürümlerini kullanan insanlar için kullanılabilir. Neden denemiyorsunuz:

$ cpan CPANPLUS

Heh, bu çok tatlı. Kendini CPANPLUS ile değiştirmek için CPAN.pm kullanın. :)
brian d foy

5

Çoğu zaman cpan install komutunun "testin kötü durum döndürdüğünü, zorlanmadan yüklenmeyeceğini" iletisiyle başarısız olması

Bu durumda modülü takmanın yolu aşağıdadır:

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

Ne yazık ki bu sonuç: CPAN.pm @INC içinde bulunamıyor (CPAN modülünü kurmanız gerekebilir) (@INC şunları içerir: / etc / perl
IgorGanapolsky

4

Ubuntu'da çoğu perl modülü zaten paketlenmiştir, bu nedenle kurulum derlemek zorunda olan diğer sistemlerden çok daha hızlıdır.

Foo::BarÖrneğin bir komut istemine yüklemek için genellikle şunları yaparsınız:

sudo apt-get install libfoo-bar-perl

Ne yazık ki tüm modüller bu adlandırma kuralına uymuyor.



4

Cpan komutunu şu şekilde kullanın: cpan Modulename

$ cpan HTML::Parser

Bağımlılıkları yüklemek için otomatik olarak aşağıdakileri izleyin

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

App :: cpanminus'u tercih ederim , bağımlılıkları otomatik olarak yükler. Sadece yap

$ cpanm HTML::Parser

3

Bildiğim 2 yol:

PPM KULLANMA:

ile Windows'un (ActivePerl) Kullandığım ppm

komut satırından ppm yazın. Ppm isteminde ...

ppm> install foo

veya

ppm> search foo

foo modüllerinin bir listesini almak için. Tür yardım tüm komutlar için

CPAN KULLANMA:

CPAN'ı şu şekilde de kullanabilirsiniz ( * nix sistemleri ):

perl -MCPAN -e 'shell'

sana bir emir verir

cpan>

anında ...

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

cpan komutlarının bir listesini almak için h yazın


1
Doğrudan komut satırından yüklemek için "$ cpan Foo :: Bar" da diyebilirsiniz. Fantezi bir astar veya CPAN kabuğu gerekmez. :)
brian d foy

3

Fedora'da şunları kullanabilirsiniz:

# yum install foo

Fedora modül için mevcut bir pakete sahip olduğu sürece.


3

Açık Fedora Linuxveya Enterprise Linux, yumayrıca parça kütüphane bağımlılıkları perl. Yani, perl modülü mevcutsa ve bazı rpm paketi bu bağımlılığı dışa aktarırsa, sizin için doğru paketi kuracaktır.

yum install 'perl(Chocolate::Belgian)'

(büyük olasılıkla perl-Çikolata-Belçika paketi, hatta ChocolateFactory paketi)


3

Benim için en kolay yol şudur:

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

a) otomatik özyinelemeli bağımlılık algılama / çözme / yükleme

b) bir kabuk onliner, kurulum komut dosyaları için iyi


2

Yeni modülü, cpan kabuğunuzun kullanmak için yapılandırılmadığı özel bir konuma koymak istiyorsanız, belki de aşağıdakiler kullanışlı olacaktır.

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

2

Bazen yum search foogöreli perl modülünü aramak için tuşunu, ardından yum install xxxkurmak için tuşunu kullanabilirsiniz .


2

Güvenli çözüm

Birçok cevap , güvenlikle ilgili bir kelime olmadan cpanyardımcı programın (kullanan CPAN.pm) kullanıldığından bahseder . Varsayılan olarak, CPAN2.27 ve önceki sürümleri MITM saldırılarına izin veren urllistbir http URL'si ( http://www.cpan.org/ ) kullanacak şekilde yapılandırır , bu nedenle güvensizdir. CHECKSUMSDosyaları indirmek için kullanılan budur , böylece güvenli bir URL olarak değiştirilmesi gerekir (örn. Https://www.cpan.org/ ).

Bu nedenle, cpan'ı çalıştırıp varsayılan yapılandırmayı kabul ettikten sonra, oluşturulan MyConfig.pmdosyayı (tam yol çıktıdır) aşağıdaki şekilde değiştirmeniz gerekir. değiştirmek

'urllist' => [q[http://www.cpan.org/]],

tarafından

'urllist' => [q[https://www.cpan.org/]],

Not: https yeterli değildir; güvenebileceğiniz bir web sitesine de ihtiyacınız var. Bu nedenle, rasgele bir ayna seçmek istiyorsanız dikkatli olun.

Sonra kullanabilirsiniz cpan her zamanki gibi .

Benim hata raporu güvensiz URL hakkında rt.cpan.org üzerinde.


"Does cpan.org " "yönlendirilmiş olsun değil cpan.org "?
Dave Everitt

1
@DaveEveritt http'den https'ye yönlendirme yalnızca gizlilik için kullanışlıdır, örneğin yalnızca ağdaki veri geçişine bakabilen birine karşı. Ancak, bir saldırgan ağı kontrol ederse (örneğin, ortak bir kablosuz erişim noktası veya korunmayan bir yerel ağ), ortadaki bir adam saldırısı olabilir ve saldırgan kendi sunucusunu kullanacaktır (açıkçası değil https://www.cpan.org/).
vinc17

1

Perl'in ActiveState dağıtımına sahip Windows'ta ppm komutunu kullanın.



1

Görünüşe göre cevabınızı almışsınız ama içeri gireceğimi düşündüm. Bir Ubuntu'daki (veya debian sunucusundaki) bazı komut dosyalarında yaptığım şey bu

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

Bu benim için iyi çalışıyor, belki burada kullanabileceğiniz bir şey var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.