7

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

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

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

我已经在网上搜索了几个小时,还没有找到任何有用的东西。

4

3 回答 3

6

对于将来寻找相同答案的任何人,可以在以下文档中cpanm找到另一个选项:

cpanm Plack@0.9990

如果您有很长的模块列表,请考虑将它们cpanfile放入cpanmDockerfile 中,而不是将它们全部列出。

为 a 中的模块指定特定版本号的最简单方法cpanfile如下:

requires 'Text::ParseWords', '==3.1';

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

requires 'Text::ParseWords';

请求最低版本:(注意缺少'==')

requires 'Text::ParseWords', '3.1';

以其他方式请求特定版本的语法在此处得到了很好的记录。

可以在通过 cpanm 和 cpanfile 安装 cpan 模块中找到使用cpanm和 a的另一篇精彩文章。cpanfile

于 2016-07-27T21:42:02.897 回答
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.

于 2016-07-26T19:56:15.487 回答
4

要让 CPAN 安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。例如要安装模块Set::Objectversion 1.28,在命令行输入:

cpan SAMV/Set-Object-1.28.tar.gz

同样的事情适用于 Docker,只需添加

RUN cpan SAMV/Set-Object-1.28.tar.gz
于 2016-07-26T19:55:46.670 回答