在我的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