如何设置我的Dockerfile以使用cpanm来安装特定版本的Perl模块?

Mik*_*Mik 7 perl docker cpanm dockerfile

在我的Dockerfile中,我正在设置将在运行时安装的Perl模块,如下所示:

RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]

但是,对于一个模块,我需要一个特定版本的模块,而不是最新版本.如何在上面的行中指定该版本?

我一直在网上搜索几个小时,但还没有找到任何有用的东西.

Sin*_*nür 6

而不是指定模块名称,请指定URL.例如,而不是Class::Data::Inheritable使用https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz

您可以通过转到metacpan上的模块页面,选择所需的版本以及复制下载链接来找到适用的URL .

PS:您可能还希望PERL_CPANM_OPT=--from https://cpan.metacpan.org/在环境中进行设置,以便cpanm仅使用下载HTTPS.


Mik*_*Mik 5

对于以后寻找相同答案的任何人,可以在以下文档中cpanm找到另一种选择:

cpanm Plack@0.9990
Run Code Online (Sandbox Code Playgroud)

如果模块列表很长,请考虑将其馈cpanfile入,cpanm而不是在Dockerfile中列出所有模块。

在中为模块指定特定版本号的最简单方法cpanfile是这样的:

requires 'Text::ParseWords', '==3.1';
Run Code Online (Sandbox Code Playgroud)

请求模块最新版本的语法是:

requires 'Text::ParseWords';
Run Code Online (Sandbox Code Playgroud)

要求最低版本:(请注意缺少“ ==”)

requires 'Text::ParseWords', '3.1';
Run Code Online (Sandbox Code Playgroud)

以其他方式请求特定版本的语法在此处已详细记录

cpanm和a 的用法的另一篇很好的文章cpanfile可以在cpanm和cpanfile的“安装cpan模块”中找到