在我的 Dockerfile 中,我正在设置将在运行时安装的 Perl 模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个特定版本的模块,而不是最新版本。如何在上面的行中指定该版本?
我已经在网上搜索了几个小时,还没有找到任何有用的东西。
在我的 Dockerfile 中,我正在设置将在运行时安装的 Perl 模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个特定版本的模块,而不是最新版本。如何在上面的行中指定该版本?
我已经在网上搜索了几个小时,还没有找到任何有用的东西。
对于将来寻找相同答案的任何人,可以在以下文档中cpanm
找到另一个选项:
cpanm Plack@0.9990
如果您有很长的模块列表,请考虑将它们cpanfile
放入cpanm
Dockerfile 中,而不是将它们全部列出。
为 a 中的模块指定特定版本号的最简单方法cpanfile
如下:
requires 'Text::ParseWords', '==3.1';
请求最新版本模块的语法是这样的:
requires 'Text::ParseWords';
请求最低版本:(注意缺少'==')
requires 'Text::ParseWords', '3.1';
以其他方式请求特定版本的语法在此处得到了很好的记录。
可以在通过 cpanm 和 cpanfile 安装 cpan 模块中找到使用cpanm
和 a的另一篇精彩文章。cpanfile
指定一个 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
.
要让 CPAN 安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。例如要安装模块Set::Object
version 1.28
,在命令行输入:
cpan SAMV/Set-Object-1.28.tar.gz
同样的事情适用于 Docker,只需添加
RUN cpan SAMV/Set-Object-1.28.tar.gz