在我的Dockerfile中,我正在设置将在运行时安装的Perl模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个特定版本的模块,而不是最新版本。如何在上面的行中指定该版本?
我一直在网上搜索几个小时,但还没有找到任何有用的东西。
答案 0 :(得分:6)
指定URL,而不是指定模块名称。例如,使用Class::Data::Inheritable
https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz
您可以转到module page on metacpan,选择所需的版本,然后复制下载链接,找到适用的网址。
PS:您可能还希望在环境中设置PERL_CPANM_OPT=--from https://cpan.metacpan.org/
,因此cpanm
仅使用HTTPS
进行下载。
答案 1 :(得分:4)
要让CPAN安装特定版本的模块,您需要提供包括作者在内的完整模块分发文件名。例如,要在命令行中安装模块Set::Object
版本1.28
,请执行以下操作:
cpan SAMV/Set-Object-1.28.tar.gz
同样适用于Docker,只需添加
即可RUN cpan SAMV/Set-Object-1.28.tar.gz
答案 2 :(得分:4)
对于将来搜索此相同答案的任何人,可以在the documentation for cpanm
中找到另一个选项:
cpanm Plack@0.9990
如果您有很长的模块列表,请考虑将cpanfile
提供给cpanm
,而不是将它们全部列在Dockerfile中。
在cpanfile
中为模块指定特定版本号的最简单方法是这样的:
requires 'Text::ParseWords', '==3.1';
请求最新版本模块的语法如下:
requires 'Text::ParseWords';
申请最低版本:(请注意缺少' ==')
requires 'Text::ParseWords', '3.1';
以其他方式请求特定版本的语法记录良好here。
可以找到使用cpanm
和cpanfile
的另一篇精彩文章
在Installation of cpan modules by cpanm and cpanfile。