如何设置我的 Dockerfile 以使用 cpanm 安装特定版本的 Perl 模块?
How do I set up my Dockerfile to use cpanm to install a specific version of a Perl module?
在我的 Dockerfile 中,我正在设置将在 运行 时安装的 Perl 模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个模块的特定版本,而不是最新版本。如何在上面的行中指定该版本?
我已经在线搜索了几个小时,但还没有找到任何有用的东西。
要让 CPAN 安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。例如要安装模块 Set::Object
版本 1.28
,在命令行键入:
cpan SAMV/Set-Object-1.28.tar.gz
同样适用于 Docker,只需添加
RUN cpan SAMV/Set-Object-1.28.tar.gz
不指定模块名称,而是指定 URL。例如,使用 https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz
而不是 Class::Data::Inheritable
您可以找到适用的 URL,方法是转至 module page on metacpan,选择您想要的版本,然后复制下载 link。
PS:您可能还想在环境中设置 PERL_CPANM_OPT=--from https://cpan.metacpan.org/
,以便 cpanm
仅使用 HTTPS
.
下载
对于将来搜索相同答案的任何人,可以在 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.
在我的 Dockerfile 中,我正在设置将在 运行 时安装的 Perl 模块,如下所示:
RUN ["cpanm", "Carp", "Carp::Heavy", "Class::Data::Inheritable"]
但是,对于一个模块,我需要一个模块的特定版本,而不是最新版本。如何在上面的行中指定该版本?
我已经在线搜索了几个小时,但还没有找到任何有用的东西。
要让 CPAN 安装特定版本的模块,您需要提供完整的模块分发文件名,包括作者。例如要安装模块 Set::Object
版本 1.28
,在命令行键入:
cpan SAMV/Set-Object-1.28.tar.gz
同样适用于 Docker,只需添加
RUN cpan SAMV/Set-Object-1.28.tar.gz
不指定模块名称,而是指定 URL。例如,使用 https://cpan.metacpan.org/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.06.tar.gz
Class::Data::Inheritable
您可以找到适用的 URL,方法是转至 module page on metacpan,选择您想要的版本,然后复制下载 link。
PS:您可能还想在环境中设置 PERL_CPANM_OPT=--from https://cpan.metacpan.org/
,以便 cpanm
仅使用 HTTPS
.
对于将来搜索相同答案的任何人,可以在 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.