我如何安装一组Perl模块的特定版本?

我负责复制生产环境以创build许多testing/静态环境。

我需要做的事情之一就是构buildPerl,这些年来已经安装了所有已经安装的模块(包括内部和外部模块)。 我只能使用CPAN.pm autobundle,但是这会导致testing环境拥有更多新版本的外部模块。

什么是最简单/最好的方式来获取和安装(很多)版本特定的Perl模块。

做你自己的CPAN镜子,正是你想要的。 Stratopan.com服务和Pinto ,build立在其上的工具可以帮助您做到这一点。

CPAN工具只安装任何发行版的最新版本,因为PAUSE只索引最新版本。 但是,您可以创build自己的私有CPAN,该CPAN具有所需的分布。 一旦你拥有了你自己的CPAN镜像,你只需要在那个镜像上指定你的CPAN工具,这样它就只能安装这些版本。 更多的在一分钟内。

现在,你想有几个版本的。 您可以根据需要创build尽可能多的镜像,也可以将镜像放在源代码控制中,以便查看任何您喜欢的镜像版本。

像CPAN :: Mini :: Inject这样的工具可以帮助你build立你自己的CPAN。 查看我在Slideshare上的基本示例演讲 ,以及一些Vimeo上的一些video演示。 看看标题中有“CPAN”或“BackPAN”的任何内容。 我想我也可能在Perl Review上有一些关于它的东西,或者应该在下一期。 🙂

最近,我一直在研究一个名为dpan(用于DarkPAN)的程序,它可以查看随机目录,在其中findPerl分布,并创build所需的结构和索引文件。 你运行dpan,你会得到一个指向你的CPAN客户端的URL,然后离开你。 这是我的MyCPAN-Indexer项目的一部分,这是在Github 。 目前还没有准备好进行无监督的公共使用,因为我主要与企业客户合作来定制他们的设置。 如果您对此感兴趣,请随时提问。

另外,我最近发布了CPAN :: PackageDetails ,可以帮助你build立正确的索引文件。 这还是有点年轻,但是如果你需要一些特别的东西,就问一下。

bdfoy有最好的大规模解决scheme,但是如果你只想安装一些模块,你可以通过引用一个tarball的path(相对于CPAN树的顶部)来要求CPAN shell安装一个特定的分发版。

cpan> install MSCHWERN/Test-Simple-0.62.tar.gz 

将URL返回到您的URL列表,您可以安装任何旧版本。

 cpan> o conf urllist push http://backpan.perl.org/ 

这是CPAN.pm常见问题解答下的“如何安装”开发者发布“模块?”

 cpan install App::cpanminus cpanm Your::Module@1.23 

(在其他答案中引用的Carton,使用下面的cpanm来解决明确的版本要求。)

这已经差不多五年了,这个问题已经得到了很好的回答。 由于此页面仍然必须在Googlesearch中显示,所以更新不会受到影响。]

Carton在这里是值得一提的。 CartonApp::cpanminusApp::cpanoutdatedApp::cpanoutdated 风格相对较新的工具 人。 作者(Miyagawa)称其为“alpha”质量,但即使在目前的状态下,纸盒也可以帮助简化版本调谐模块在多台机器上的多个环境的维护。

Pinto也是另一个最近的工具与一些答复有关(实际上其中一个答复者是贡献者)。

Stratopan.com是另一种select。 Stratopan在云中提供私有CPAN。 您可以使用特定版本的模块(及其依赖项)填充Stratopan存储库,然后使用标准Perl工具链安装它们。 版本库仅在决定更改时才会更改,因此您将始终获取所需模块的版本。

免责声明:我使用Stratopan。

看起来,创build一个列出所有模块和所需版本(使用== <version>语法将其locking到特定版本)的cpanfile也可以在这里很好地发挥作用。 这意味着使用Cartoncpanm来安装模块。

这样做的好处是能够快速/轻松地调整文件以testing在开发环境或临时环境中升级特定模块 – 这是私人CPAN镜像不允许您执行的操作(无需创build多个镜像)。