首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装带有perlbrew和cpm - perlbrew开关的模块在docker构建过程中不会更改@INC。

安装带有perlbrew和cpm - perlbrew开关的模块在docker构建过程中不会更改@INC。
EN

Stack Overflow用户
提问于 2019-06-14 01:48:11
回答 1查看 549关注 0票数 2

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

此外,我还使用百酿安装了目标perl版本。

根据cpm的文档-g选项将在当前@INC中安装模块

如何在Dockerfile中强制perlbrew @INC?

下面是我的Dockerfile的一部分

代码语言:javascript
复制
RUN perl -le 'print for @INC' && \
    perlbrew switch perl-5.31.0 && \
    perl -le 'print for @INC' && \
    cpm install -gv CGI && \
    perlbrew list-modules

当我构建Dockerfile时,perl -le 'print for @INC'的输出两次是相同的:

代码语言:javascript
复制
/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

但是,如果我手动执行相同的结果,就可以了:

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 04:16:27

首先,“一个子壳是用.”指示您的perlbrew设置错误。指示您将以下内容添加到shell的启动脚本中:

代码语言:javascript
复制
source "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/etc/bashrc

没有这一点,就会使用一种后备机制来提供所需的功能,但在交互shell之外,它是完全无用的。

其次,这是一个相当令人怀疑的使用perlbrew。如果您的停靠脚本按预期工作,它将产生深远的后果。这可不是件好事。可以使用perlbrew use,但可以直接使用正确的perl构建

代码语言:javascript
复制
RUN "${PERLBREW_ROOT:-$HOME/perl5/perlbrew}"/perls/perl-5.31.0/bin/perl -S cpm install -gv CGI

在您的情况下,这应该可以解决

代码语言:javascript
复制
RUN /usr/local/perlbrew/perls/perl-5.31.0/bin/perl -S cpm install -gv CGI

为了你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56590443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档