Làm cách nào để yêu cầu CPAN cài đặt tất cả các phần phụ thuộc?


113

Làm cách nào để yêu cầu CPAN cài đặt tất cả các phần phụ thuộc?

Tôi đã thử cài đặt những thứ này trong cpan:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

Tôi vẫn phải trả lời "y" một vài lần (nhưng ít hơn so với trước đây).

Có cách nào để khiến nó luôn tiếp tục và cài đặt không? Tôi muốn làm cho nó không bị giám sát.

Có vẻ như tôi muốn một lá cờ luôn tin tưởng CPAN sẽ làm điều đúng và nếu nó gợi ý một câu trả lời, tôi sẽ làm theo nó (luôn nhấn Enterkhi nó hỏi điều gì đó).


1
Có lẽ tôi nên thêm một tính năng vào tập lệnh cpan của mình để đặt các biến môi trường tự động cài đặt dựa trên cài đặt CPAN.pm. Hãy xem câu trả lời của tsee, đó là nửa còn lại của vấn đề.
brian d foy

Câu trả lời:


31

Dưới đây là một lớp lót thực hiện các thay đổi này vĩnh viễn bao gồm cấu hình CPAN lần đầu tự động:

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'

Hoặc kết hợp nó với local::libmô-đun cho người dùng không có đặc quyền:

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'

Chạy nó trước khi sử dụng CPAN shell hoặc bất cứ thứ gì.


nó không giống như trong @sdf anwer?
filimonov

83

Hãy thử đặt PERL_MM_USE_DEFAULT như vậy:

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

Nó sẽ làm cho CPAN trả lời mặc định cho tất cả các lời nhắc.


Bất kỳ cách nào để làm cho điều này liên tục, vì vậy bạn chỉ cần gõ "install My: Module" vào cpan mỗi lần và nó sẽ nhớ điều này? Chỉnh sửa Config.pm?
Geoff

3
Nếu bạn đang sử dụng Linux, hãy thêm dòng export PERL_MM_USE_DEFAULT=1vào ~ / .bashrc
anders của bạn và

1
Nếu bạn gặp lỗi, hãy Can't locate object method "install" via package "xxx" at -e line 1.thêm dấu "+" ngay trước tên mô-đun.
Yann Sagon

55

Câu trả lời mới nhất và tuyệt vời nhất cho câu hỏi này là sử dụng cpanmthay thế (còn được gọi là App :: cpanminus hoặc cpanminus)!

SỰ MIÊU TẢ

cpanminus là một tập lệnh để lấy, giải nén, xây dựng và cài đặt các mô-đun từ CPAN và không làm gì khác.

Nó không phụ thuộc (có thể tự khởi động), không yêu cầu cấu hình và độc lập. Khi chạy, nó chỉ yêu cầu 10MB RAM.

Để bootstrap cài đặt nó:

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

hoặc nếu bạn đang sử dụng perlbrewđơn giản

perlbrew install-cpanm

hoặc từ chính cpan:

cpan install App::cpanminus

Từ đó trở đi cài đặt các mô-đun bằng cách thực thi (dưới dạng root nếu cần)

cpanm Foo::Bar

1
Tôi gặp vấn đề này khi tôi sử dụng cpanm, vì vậy việc bảo tôi sử dụng nó không phải là giải pháp ở đây.
reinierpost

3
chứ không phải là một bình luận mù quáng, vui lòng hỏi dưới dạng một câu hỏi mới và liên kết ở đây. Tôi nghi ngờ một vấn đề quyền có thể là vấn đề của bạn
Joel Berger

Trên Ubuntu 18.04 mà tôi đã cài đặt sudo apt install cpanminus make.
Pablo A

Bỏ phiếu từ chối. Không khuyến nghị mọi người thực hiện đầu ra của curl.
Richard Smith

28

Đây là những gì tôi khá chắc rằng bạn đang tìm kiếm:

cpan> o conf prerequisites_policy follow
cpan> o conf commit

27

Thay đổi tham số sau trên đầu tiên của điều kiện tiên quyết_policy sau.

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

Điều này sẽ thay đổi nó từ "hỏi / có" thành "có" và dừng nó hỏi bạn.


Cảm ơn! Tôi cần hai tùy chọn này để nó không hỏi tôi một lần nữa!
Đạt TT

Lưu ý rằng đây là các giá trị mặc định cho các cài đặt này.
ikegami


6

Bộ

prerequisites_policy

trong cấu hình.

Xem cấu hình biến .


2
Các lời nhắc có liên quan đến tải xuống nguồn mô-đun không? Nếu vậy, hãy xem tùy chọn connect_to_internet_ok . Nếu không, hãy cho chúng tôi biết những lời nhắc nào khác mà bạn đang cố gắng tránh.
Sinan Ünür

Về cơ bản, những cái cuối cùng này là "mô-đun tùy chọn".
Nifle

Vấn đề là những thứ tự động cài đặt của chúng. CPAN.pm không có cơ hội xử lý những thứ đó. Xem câu trả lời của tsee.
brian d foy

1
Liên kết bây giờ dường như đã chết
OrangeDog

3

Cá nhân tôi chỉ thử một vài lần để sửa đổi cài đặt theo cách đó và thực sự thấy việc đưa vào trình CPAN.pmbao dễ dàng hơn bằng cách cpankhông đưa ra đối số, sau đó định cấu hình CPAN.pmtừ lời nhắc tương tác:

$ cpan
cpan> o conf init

Thao tác này sẽ khởi động CPAN.pmtiện ích cấu hình giao diện. Đơn giản chỉ cần chạy qua nó và chỉ định "theo dõi" nơi bạn cần (tôi quên mất câu hỏi), và bạn nên đi.


Bạn có thể chuyển các cài đặt cụ thể sang init. Ví dụ o conf init prerequisites_policy,. Bằng cách đó, bạn không cần phải trải qua quá trình khởi dài, nhưng vẫn nhận được nhắc nhở thân thiện cho các thiết lập trong câu hỏi
Ikegami

3

Cho đến nay, tôi thấy đây là cách nhanh nhất và đáng tin cậy nhất để cài đặt các mô-đun CPAN:

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

Điều này không trả lời câu hỏi - OP muốn một cách để tự động cài đặt các phần phụ thuộc / tự động trả lời các lời nhắc.
William Turrell

Trên thực tế, nó có cài đặt các phụ thuộc và tự động trả lời các lời nhắc. Tôi sử dụng nó mọi lúc, kể cả khoảnh khắc này. Nhưng có một nhu cầu cho một sự thay đổi nhỏ: yes|/root/bin/perl -MCPAN -e "CPAN::Shell->notest(qw!install Your::Module!)"
Vladimir Marchenko

" yes" Phải làm gì?
Peter Mortensen

2

Tôi viết bài này vì lợi ích của những người có thể đã vào trang này để tìm kiếm cách cài đặt tất cả các phụ thuộc mô-đun cần thiết bởi một tập lệnh perl cụ thể. Tôi đã viết một kịch bản cho điều đó:

Nó sẽ được chạy như ./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";
    }
    }
}

Điều này sẽ sử dụng cpanminus để cài đặt tất cả các phụ thuộc mô-đun theo yêu cầu của tập lệnh của bạn. Nếu cpanm chưa được cài đặt, nó sẽ cài đặt nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.