我如何设置我的Dockerfile来使用cpanm来安装特定版本的Perl模块?
在我的Dockerfile中,我设置了将在运行时安装的Perl模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要特定版本的模块,而不是最新的模块。 我如何在上面的行中指定该版本?
我一直在网上search几个小时,还没有发现任何有用的东西。
而不是指定一个模块名称,指定一个URL。 例如,而不是Class::Data::Inheritable
,使用https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz
您可以通过访问metacpan上的模块页面 ,select所需的版本以及复制下载链接来find适用的URL。
PS:你也许还想在环境中设置PERL_CPANM_OPT=--from https://cpan.metacpan.org/
,所以cpanm
只能使用HTTPS
下载。
要使CPAN安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。 例如,要安装模块Set::Object
版本1.28
,请在命令行中input:
cpan SAMV/Set-Object-1.28.tar.gz
同样的事情适用于Docker,只需添加
RUN cpan SAMV/Set-Object-1.28.tar.gz
对于将来寻找同样答案的人,可以在cpanm
的文档中find另一个选项:
cpanm Plack@0.9990
如果你有一个很长的模块列表,可以考虑把cpanfile
放到cpanm
而不是把它们全部列在Dockerfile中。
在cpanfile
为模块指定特定版本号的最简单的方法是这样的:
requires 'Text::ParseWords', '==3.1';
请求最新版本的模块的语法是这样的:
requires 'Text::ParseWords';
请求最低版本:(注意缺less'==')
requires 'Text::ParseWords', '3.1';
以其他方式请求特定版本的语法在这里有相当详细的文档。
在cpanm
和cpanfile
安装cpan模块中可以find使用cpanm
和cpanfile
另一个很好的方法 。