当前位置: 首页 > 面试题库 >

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

陈阳舒
2023-03-14
问题内容

我想在项目中使用快速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

当我构建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

问题答案:

对于初学者,“ 使用…启动子外壳 ”表示您的安装不正确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

为了你。



 类似资料:
  • 这里是的,还是推荐的安装方法如 http://raku.org/getting-started/和 ps:使用OS X

  • 问题内容: 如何在Python中更改系统日期,时间和时区?有没有可用的模块? 我不想执行任何系统命令 我想要一个通用的解决方案,该解决方案应该在Unix和Windows上都可以使用。 问题答案: 我没有Windows机器,所以我没有在Windows上对其进行测试…但是您明白了。

  • 问题内容: 我正在尝试使用pip安装Pillow(Python模块),但是会引发以下错误: 因此,正如错误所述,我尝试了: 但是它失败了: 有什么提示如何处理吗? 问题答案: 谢谢@mfitzp。就我而言(CentOS),这些库在yum存储库中不可用,但实际上解决方案甚至更容易。我做了什么: 至此,枕头的安装成功完成。

  • 我正在尝试安装一个名为Scrapy的模块。我是用电脑安装的 我在my/usr/local/lib/python2中看到了“scrapy”文件夹。7/site包,但当我尝试在Python程序中导入它时,它说没有这个名称的模块。你知道为什么会这样吗? 编辑:以下是pip命令的输出: 当我运行 /usr/local/bin/scrapy我得到命令和可用命令的用法。我注意到我的 /usr/local/bi

  • 问题内容: node的github页面上列出了很多模块,但未随npm- registry发布。这些模块不能使用npm安装。 从Git克隆它们之后,安装这些nodejs模块的正确方法是什么? 问题答案: 您需要从github下载其源代码。查找主文件,然后将其包含在主文件中。 可以在这里找到一个示例> 如何手动安装node.js模块? 通常,您需要查找源并浏览package.json文件。在那里您可以

  • 问题内容: 我有一个下载的模块库,我想在本地安装它,而不是在另一个目录中全局安装? 有什么简单的方法可以做到这一点? 问题答案: 您只需为提供一个参数,则该参数应指向本地文件夹而不是包名称: