簡體   English   中英

使用 perlbrew 和 cpm 安裝模塊 - perlbrew 開關在 docker 構建期間不會更改 @INC

[英]Install modules with perlbrew and cpm - perlbrew switch does not change @INC during docker build

我想在我的項目中使用快速cpm模塊安裝程序而不是 cpanm。

我還使用perlbrew安裝目標 perl 版本。

根據 cpm -g選項的文檔將模塊安裝到當前的@INC

如何在 Dockerfile 中強制 perlbrew 更改 @INC ?

下面是我的 Dockerfile 的一部分

RUN perl -le 'print for @INC' && \
    perlbrew switch perl-5.31.0 && \
    perl -le 'print for @INC' && \
    cpm install -gv CGI && \
    perlbrew list-modules

當我構建perl -le 'print for @INC' Dockerfile 輸出時, perl -le 'print for @INC'兩次都相同:

/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1
/usr/local/share/perl/5.22.1
/usr/lib/x86_64-linux-gnu/perl5/5.22
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.22
/usr/share/perl/5.22
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base

但是如果我手動執行相同的結果是可以的:

$ docker run -it pavelsr/xxxhub
root@1a34ea34a3fb:/# perl -le 'print for @INC'
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1
/usr/local/share/perl/5.22.1
/usr/lib/x86_64-linux-gnu/perl5/5.22
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.22
/usr/share/perl/5.22
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base
.
root@1a34ea34a3fb:/# perlbrew switch perl-5.31.0

A sub-shell is launched with perl-5.31.0 as the activated perl. Run 'exit' to finish it.

root@1a34ea34a3fb:/# perl -le 'print for @INC'
/usr/local/perlbrew/perls/perl-5.31.0/lib/site_perl/5.31.0/x86_64-linux
/usr/local/perlbrew/perls/perl-5.31.0/lib/site_perl/5.31.0
/usr/local/perlbrew/perls/perl-5.31.0/lib/5.31.0/x86_64-linux
/usr/local/perlbrew/perls/perl-5.31.0/lib/5.31.0
root@1a34ea34a3fb:/# cpm install -g CGI
DONE install HTML-Tagset-3.20
DONE install HTML-Parser-3.72
DONE install CGI-4.44
3 distributions installed.
root@1a34ea34a3fb:/# perlbrew list-modules
CGI
HTML::Parser
HTML::Tagset
Perl

對於初學者來說,“一個子shell啟動與...”表示你有一個設置不正確, perlbrew 您被指示將以下內容添加到您的 shell 的啟動腳本中:

source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/etc/bashrc

如果沒有這個,回退機制被用來嘗試提供所需的功能,但它在交互式 shell 之外完全沒有用。


其次,這是對 perlbrew 的一種相當可疑的使用。 如果您的 docker 腳本按預期工作,它將產生深遠的影響。 這可不是什么好事。 您可以使用perlbrew use ,但您可以直接使用正確的perl構建

RUN "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/perls/perl-5.31.0/bin/perl -S cpm install -gv CGI

在你的情況下,這應該解決

RUN /usr/local/perlbrew/perls/perl-5.31.0/bin/perl -S cpm install -gv CGI

為你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM