gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:14:04 27 4
gpt4 key购买 nike

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

我还使用 perlbrew 安装目标 perl 版本.

根据documentation每千次展示费用 -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 输出时两次都是一样的:
/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

最佳答案

对于初学者,“A sub-shell is launch with ...”表示您的设置不正确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

为你。

关于perl - 使用 perlbrew 和 cpm 安装模块 - perlbrew 开关在 docker build 期间不会更改 @INC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56590443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com