Bagaimana cara memberitahu CPAN untuk menginstal semua dependensi?


113

Bagaimana cara memberitahu CPAN untuk menginstal semua dependensi?

Saya mencoba mengatur ini di cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Saya masih harus menjawab "y" beberapa kali (tapi rasanya lebih sedikit dari sebelumnya).

Adakah cara untuk membuatnya selalu maju dan menginstal? Saya ingin membuatnya tanpa pengawasan.

Tampaknya saya ingin sebuah bendera selalu mempercayai CPAN untuk melakukan hal yang benar, dan jika itu memberikan jawaban, saya ingin mengikutinya (selalu tekan Enterketika ditanya sesuatu).


1
Mungkin saya harus menambahkan fitur ke skrip cpan saya untuk mengatur variabel lingkungan instal otomatis berdasarkan pengaturan CPAN.pm. Lihat jawaban tsee, yang merupakan bagian lain dari soal.
brian d foy

Jawaban:


31

Berikut ini satu baris yang membuat perubahan ini permanen termasuk konfigurasi CPAN pertama kali otomatis:

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'

Atau gabungkan dengan local::libmodul untuk pengguna yang tidak memiliki hak istimewa:

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'

Jalankan sebelum menggunakan shell CPAN atau apa pun.


bukankah sama dengan di @sdf jawaban?
filimonov

83

Coba atur PERL_MM_USE_DEFAULT seperti ini:

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

Itu harus membuat CPAN menjawab default untuk semua prompt.


Adakah cara untuk membuat ini persisten, jadi Anda cukup mengetik "install My: Module" ke cpan setiap saat dan itu akan mengingat ini? Edit Config.pm?
Geoff

3
Jika Anda menggunakan linux, tambahkan baris export PERL_MM_USE_DEFAULT=1ke ~ / .bashrc
anders dan

1
Jika Anda mendapatkan kesalahan, Can't locate object method "install" via package "xxx" at -e line 1.tambahkan "+" tepat sebelum nama modul.
Yann Sagon

55

Jawaban terbaru dan terbaik untuk pertanyaan ini adalah dengan menggunakan cpanm(juga disebut sebagai App :: cpanminus atau cpanminus)!

DESKRIPSI

cpanminus adalah skrip untuk mendapatkan, membongkar, membangun, dan menginstal modul dari CPAN dan tidak melakukan apa pun.

Ini bebas ketergantungan (bisa bootstrap sendiri), tidak memerlukan konfigurasi, dan berdiri sendiri. Saat dijalankan, hanya membutuhkan RAM 10MB.

Untuk bootstrap, instal:

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

atau jika Anda perlbrewhanya menggunakan

perlbrew install-cpanm

atau dari cpan itu sendiri:

cpan install App::cpanminus

Sejak saat itu instal modul dengan menjalankan (sebagai root jika perlu)

cpanm Foo::Bar

1
Saya memiliki masalah ini saat saya menggunakan cpanm, jadi memberitahu saya untuk menggunakannya bukanlah solusi di sini.
reinierpost

3
daripada komentar buta, silakan ajukan sebagai pertanyaan dan tautan baru di sini. Saya curiga masalah izin mungkin menjadi masalah Anda
Joel Berger

Di Ubuntu 18.04 yang saya instal sudo apt install cpanminus make.
Pablo A

Pemberian suara negatif. Jangan merekomendasikan orang-orang untuk mengeksekusi hasil curl.
Richard Smith

28

Inilah yang saya yakin Anda cari:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Mengubah parameter berikut di atas prerequisites_policy mengikuti.

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

Ini akan mengubahnya dari "tanya / ya" menjadi "ya" dan berhenti bertanya kepada Anda.


Terima kasih! Saya membutuhkan dua opsi ini agar tidak meminta saya lagi dan lagi!
Dat TT

Perhatikan bahwa ini adalah nilai default untuk pengaturan ini.
ikegami


6

Set

prerequisites_policy

dalam konfigurasi.

Lihat Variabel Konfigurasi .


2
Apakah petunjuknya terkait dengan mengunduh sumber modul? Jika demikian, lihat opsi connect_to_internet_ok . Jika tidak, beri tahu kami permintaan lain apa yang Anda coba hindari.
Sinan Ünür

Pada dasarnya, yang terakhir ini adalah "modul opsional".
Nifle

Masalahnya adalah hal-hal yang menginstal otomatis sendiri. CPAN.pm tidak mendapat kesempatan untuk menangani hal itu. Lihat jawaban tsee.
brian d foy

1
Tautan sekarang tampaknya sudah mati
OrangeDog

3

Secara pribadi saya hanya mencoba beberapa kali untuk mengubah pengaturan dengan cara itu dan benar-benar merasa lebih mudah untuk masuk ke CPAN.pmshell dengan cpantidak memberikan argumen, kemudian mengkonfigurasi CPAN.pmdari prompt interaktif:

$ cpan
cpan> o conf init

Ini akan memulai CPAN.pmutilitas konfigurasi antarmuka. Cukup jalankan melalui itu dan tentukan "ikuti" di mana Anda perlu (saya lupa pertanyaannya begitu saja), dan Anda harus melakukannya dengan baik.


Anda dapat memberikan pengaturan khusus ke init. Misalnya o conf init prerequisites_policy,. Dengan begitu, Anda tidak perlu melalui proses inisialisasi yang lama, tetapi tetap mendapatkan prompt ramah untuk pengaturan yang dimaksud
ikegami

3

Saya menemukan ini, sejauh ini, cara tercepat dan paling andal untuk menginstal modul CPAN:

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

Ini tidak menjawab pertanyaan - OP menginginkan cara untuk menginstal dependensi secara otomatis / secara otomatis merespons perintah.
William Turrell

Faktanya, ia menginstal dependensi dan secara otomatis merespons permintaan. Saya menggunakannya sepanjang waktu, termasuk saat ini. Tetapi ada kebutuhan untuk sedikit modifikasi: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

Apa yang harus " yes" lakukan?
Peter Mortensen

2

Saya menulis ini untuk kepentingan orang-orang yang mungkin datang ke halaman ini mencari cara untuk menginstal semua dependensi modul yang dibutuhkan oleh skrip perl tertentu. Saya menulis skrip untuk itu:

Ini harus dijalankan sebagai ./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";
    }
    }
}

Ini akan menggunakan cpanminus untuk menginstal semua dependensi modul yang diperlukan oleh skrip Anda. Jika cpanm tidak diinstal, itu akan menginstalnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.