使用perlbrew和cpm安装模块-在docker build期间perlbrew开关不会更改@INC

时间:2019-06-14 01:48:11

标签: perl docker perlbrew cpanm

我想在项目中使用快速的cpm模块安装程序而不是cpanm。

我也使用perlbrew安装目标perl版本。

根据cpm -g选项的documentation,会将模块安装到当前的@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时,两次输出相同:

/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

1 个答案:

答案 0 :(得分:2)

对于初学者,“ 使用... 启动子外壳”表示您的perlbrew设置不正确。系统提示您将以下内容添加到Shell的启动脚本中:

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

如果没有此功能,则使用后备机制来尝试提供所需的功能,但在交互式外壳程序之外完全没有用。


其次,这是对白葡萄酒的相当怀疑的使用。如果您的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

为您