CPAN'a tüm bağımlılıkları yüklemesini nasıl söylerim?


113

CPAN'a tüm bağımlılıkları yüklemesini nasıl söylerim?

Bunları ayarlamayı denedim cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Yine de birkaç kez "y" cevabını vermek zorunda kaldım (ama eskisine göre daha az).

Her zaman devam etmesini ve yüklemesini sağlamanın bir yolu var mı? Gözetimsiz yapmak istiyorum.

Görünüşe göre bir bayrak CPAN'a doğru şeyi yapması için her zaman güvenmek istiyor ve bir cevap önerirse onu takip etmek isterim (her Enterzaman bir şey sorduğunda vurun).


1
Belki de CPAN.pm ayarına göre otomatik kurulum ortamı değişkenlerini ayarlamak için cpan betiğime bir özellik eklemeliyim. Sorunun diğer yarısı olan cevabına bakın.
brian d foy

Yanıtlar:


31

Otomatik ilk kez CPAN yapılandırması dahil olmak üzere bu değişiklikleri kalıcı hale getiren tek satır:

perl -MCPAN -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

Veya local::libayrıcalıklı olmayan kullanıcılar için modül ile birleştirin :

perl -MCPAN -Mlocal::lib=~/perl5 -e 'my $c = "CPAN::HandleConfig"; $c->load(doit => 1, autoconfig => 1); $c->edit(prerequisites_policy => "follow"); $c->edit(build_requires_install_policy => "yes"); $c->commit'

CPAN kabuğunu veya her neyse kullanmadan önce çalıştırın.


@sdf yanıtındaki ile aynı değil mi?
filimonov

83

PERL_MM_USE_DEFAULT'u şu şekilde ayarlamayı deneyin:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install My::Module'

CPAN'ı tüm istemlere varsayılan yanıt yapmalıdır.


Bunu kalıcı hale getirmenin herhangi bir yolu, böylece her seferinde cpan'e "install My: Module" yazabilirsiniz ve bunu hatırlasın mı? Config.pm düzenlensin mi?
Geoff

3
Linux kullanıyorsanız, satırı export PERL_MM_USE_DEFAULT=1~ / .bashrc
anders ve

1
Bir hata alırsanız Can't locate object method "install" via package "xxx" at -e line 1.modül adının hemen önüne bir "+" ekleyin.
Yann Sagon

55

Bu sorunun en son ve en büyük cevabı cpanmbunun yerine kullanmaktır (aynı zamanda App :: cpanminus veya cpanminus olarak da anılır)!

AÇIKLAMA

cpanminus, modülleri CPAN'dan almak, paketini açmak, oluşturmak ve kurmak için bir betiktir ve başka hiçbir şey yapmaz.

Bağımlılık içermez (kendi kendini önyükleyebilir), sıfır yapılandırma gerektirir ve tek başına durur. Çalışırken, yalnızca 10MB RAM gerektirir.

Bootstrap yüklemek için:

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

veya perlbrewbasitçe kullanıyorsanız

perlbrew install-cpanm

veya cpan'ın kendisinden:

cpan install App::cpanminus

O andan itibaren modülleri çalıştırarak yükleyin (gerekirse kök olarak)

cpanm Foo::Bar

1
Kullandığım zaman bu sorunu yaşıyorum cpanm, bu yüzden kullanmamı söylemek burada çözüm değil.
reinierpost

3
kör bir yorum yerine lütfen yeni bir soru olarak sorun ve buraya bağlantı verin. Bir izin sorununun sizin sorununuz olabileceğinden şüpheleniyorum
Joel Berger

Ubuntu 18.04'te sudo apt install cpanminus make.
Pablo A

Aşağı-oylama. İnsanların curl çıktısını çalıştırmasını önermeyin.
Richard Smith

28

İşte aradığınızdan oldukça emin olduğum şey:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Prerequisites_policy'nin üstüne aşağıdaki parametrenin değiştirilmesi aşağıdaki gibidir.

cpan> o conf prerequisites_policy 'follow'
cpan> o conf build_requires_install_policy yes
cpan> o conf commit

Bu, "sor / evet" yerine "evet" e değiştirecek ve size sormasını durduracaktır.


Teşekkürler! Bana tekrar tekrar sormaması için bu iki seçeneğe ihtiyacım var!
Dat TT

Bunların bu ayarlar için varsayılan değerler olduğuna dikkat edin.
ikegami


6

Ayarlamak

prerequisites_policy

konfigürasyonda.

Bkz. Yapılandırma Değişkenleri .


2
İstemler modül kaynağının indirilmesiyle ilgili mi? Öyleyse, connect_to_internet_ok seçeneğine bakın . Aksi takdirde, kaçınmaya çalıştığınız başka hangi uyarıları bize bildirin.
Sinan Ünür

Temel olarak, bu sonuncular "isteğe bağlı modüller" idi.
Nifle

Sorun, kendiliğinden otomatik olarak yüklenen şeylerdir. CPAN.pm bu tür şeyleri halletme şansına sahip değil. Cevabını görün.
brian d foy

1
Bağlantı artık
çalışmıyor

3

Kişisel olarak, ayarları bu şekilde değiştirmek için yalnızca birkaç kez denedim ve aslında hiçbir argüman CPAN.pmvermeden kabuğa düşmenin daha kolay olduğunu buldum cpan, ardından CPAN.pmetkileşimli komut isteminden yapılandırdım :

$ cpan
cpan> o conf init

Bu, CPAN.pmarabirim yapılandırma yardımcı programını başlatacaktır . Basitçe üzerinden geçin ve ihtiyacınız olan yeri "takip edin" seçeneğini belirtin (soruyu önceden unutuyorum) ve gitmekte iyi olmalısınız.


Belirli ayarları 'a aktarabilirsiniz init. Örneğin o conf init prerequisites_policy,. Bu şekilde, uzun başlatma sürecinden geçmesi gerekiyor, ama yine de söz konusu ayarı için dost istemi alamadım
Ikegami

3

Bunu, CPAN modüllerini kurmanın açık ara en hızlı ve en güvenilir yolu olarak buldum:

yes | perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"

Bu soruya yanıt vermez - OP, bağımlılıkları otomatik olarak kurmanın / istemlere otomatik olarak yanıt vermenin bir yolunu ister.
William Turrell

Aslında, bağımlılıkları kurar ve istemlere otomatik olarak yanıt verir. Bu an da dahil olmak üzere her zaman kullanıyorum. Ancak küçük bir değişikliğe ihtiyaç var: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

" yes" Ne yapmalı?
Peter Mortensen

2

Bunu, belirli bir perl betiğinin ihtiyaç duyduğu tüm modül bağımlılıklarını kurmanın bir yolunu arayan bu sayfaya gelmiş olabilecek kişilerin yararına yazıyorum. Bunun için bir senaryo yazdım:

Olarak çalıştırılmalıdır ./installdep.pl yourscript.pl

#!/usr/bin/perl
`sudo apt install cpanminus`;
while (<>) {
    if (/USE /i)
    {
        my $line=$_;
        $line=~ s/\s//g;
        $line=~ /^(.*)\./;
        $line=~ s/\;//;
        $line=~s/^USE//i;
        $line=~s/lib.*//i;
        $line=~s/feature.*//i;
        $line=~s/strict//i;
        $line=~s/warnings//i;
        $line =~ s/^(.*)\(.*/$1/;
        unless ($line eq '') {
        my $cmd='sudo cpanm '.$line;
        print "Installing $line \n";
        open my $cmd_fh, "$cmd |";
        while (<$cmd_fh>) {
          print "$_";
        }
        close $cmd_fh;
        print "\n";
    }
    }
}

Bu, betiğinizin gerektirdiği tüm modül bağımlılıklarını yüklemek için cpanminus kullanacaktır. Cpanm kurulu değilse, onu kuracaktır.

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.