在我的Dockerfile,我设立运行时将安装Perl模块,像这样:如何设置我的Dockerfile以使用cpanm来安装特定版本的Perl模块?
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个模块的特定版本不是最新的一。我如何在上面的行中指定该版本?
我一直在网上搜索几个小时,还没有发现任何有用的东西。
在我的Dockerfile,我设立运行时将安装Perl模块,像这样:如何设置我的Dockerfile以使用cpanm来安装特定版本的Perl模块?
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个模块的特定版本不是最新的一。我如何在上面的行中指定该版本?
我一直在网上搜索几个小时,还没有发现任何有用的东西。
代替指定模块名称,指定的URL。例如,使用https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz
您可以转到module page on metacpan,选择所需的版本并复制下载链接,以找到适用的URL。
PS:您可能还想在环境中设置PERL_CPANM_OPT=--from https://cpan.metacpan.org/
,因此cpanm
只能使用HTTPS
下载。
要让CPAN安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。例如,要安装该模块Set::Object
版本1.28
,在命令行中输入:
cpan SAMV/Set-Object-1.28.tar.gz
同样的事情适用与码头工人,只需添加
RUN cpan SAMV/Set-Object-1.28.tar.gz
任何人谁是寻找在未来这个相同的答案,另一种选择可以在这里找到在the documentation for cpanm
:
cpanm [email protected]
如果你有模块的一个长长的清单,考虑喂养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中找到 。
非常好的总结(我将在稍后整理一下格式)。但是,请注意,在制作过程中,我想知道所有内容都来自哪里。为此,您可能希望保留自己的CPAN dist文件特定实例的存储库。另请参阅[CPAN :: Mini](https://metacpan.org/pod/CPAN::Mini)和[Pinto](https://metacpan.org/pod/Pinto)。 –
谢谢。我看着平托,并决定这将是矫枉过正,因为我只是用它来旋转码头集装箱。 [Carton](https://metacpan.org/release/carton)是另一个需要考虑的工具,虽然它也使用cpanfile,而且我在查找工作语法时遇到了问题,以便在其中包含url而不是版本号cpanfile。 – Mik
我不认为在cpanfile中有通过URL包含模块的语法。但是,您可以通过在环境中设置镜像并指定确切的版本来达到相同的效果。 –
有关环境选项的好建议! – Mik