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

我的任务是复制一个生产环境来创建许多测试/坐标环境。

我需要做的事情之一是构建 Perl,包括多年来安装的所有模块(包括内部和外部模块)。我可以只使用 CPAN.pm autobundle,但是这将导致测试环境拥有生产环境所拥有的外部模块的更新版本。

获取和安装(大量)版本特定的 Perl 模块的最简单/最佳方法是什么。

57782 次浏览

根据自己的需要制作自己的 CPAN 镜像。Stratopan.com是一种服务,而 平托是构建在其上的工具,它们可以帮助您实现这一点。

CPAN 工具只安装任何发行版的最新版本,因为 PAUSE 只索引最新版本。但是,您可以创建自己的私有 CPAN,它具有所需的发行版。一旦您拥有了自己的 CPAN 镜像,并且只有您想要的版本,您就可以将您的 CPAN 工具仅指向该镜像,以便它只安装那些版本。稍后详细介绍。

现在,你需要有几个不同的版本。您可以创建任意数量的镜像,还可以将镜像放在源代码管理中,这样就可以检查任意版本的镜像。

诸如 CPAN: : Mini: : Inject 之类的工具可以帮助您设置自己的 CPAN。查看 我在 Slideshare 上的演讲中的基本示例,以及一些示例中的 我在 Vimeo 上的视频。看看标题中有“ CPAN”或“ BackPAN”的任何东西。我想我可能有一些关于它的东西在 Perl 评论太,或应在下一期。:)

最近,我一直在开发一个名为 dpan (用于暗 PAN)的程序,它可以查看随机目录,在其中查找 Perl 发行版,并创建所需的结构和索引文件。运行 dpan,获得指向 CPAN 客户端的 URL,然后就可以开始了。这是我在 Github中的 MyCPAN-Indexer 项目的一部分。它还没有完全准备好在无人监督的情况下公开使用,因为我主要与企业客户合作来定制他们的设置。如果你有兴趣,可以随时问我问题。

另外,我最近发布了 包裹详情,它可以帮助您构建正确的索引文件。它还有点年轻,但是再说一次,如果你需要特别的东西,尽管开口。

Bdfoy 拥有最好的大规模解决方案,但是如果您只想安装一些模块,您可以通过引用 tarball (相对于 CPAN 树的顶部)的路径,要求 CPAN shell 安装特定的发行版。

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

将一个到 BackPAN 的 URL 添加到 URL 列表中,您就可以安装任何旧版本。

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

这是在 CPAN.pm 常见问题下的“如何安装一个模块的‘开发人员发布’?”

[5年过去了,这是一个问得好、回答得好的问题,有很多观点。因为这个页面必须在谷歌搜索中出现,所以更新不会有什么坏处。]

值得一提的是 Carton Carton是一个相对较新的工具,其风格与 App::cpanminusApp::cpanoutdatedperlbrew等等。相同。作者(宫川)称其为“ alpha”质量,但即使在其目前的状态下,纸箱也有助于简化跨机器的版本调整模块的多种环境的维护。

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

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

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

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

这样做的好处是能够快速/轻松地调整文件,以测试在开发人员或临时环境中升级特定模块——私有 CPAN 镜像不允许这样做(不创建多个镜像)。