【问题标题】:How can I install a specific version of a set of Perl modules?如何安装一组 Perl 模块的特定版本?
【发布时间】:2020-08-24 03:31:38
【问题描述】:

我的任务是复制生产环境以创建许多测试/坐席环境。

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

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

【问题讨论】:

    标签: perl version module cpan


    【解决方案1】:

    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 FAQ 下的“如何安装模块的'DEVELOPER RELEASE'?”

    【讨论】:

    • 不错。这让我可以解决我无法升级的服务器的兼容性问题。谢谢!
    • 我认为这些天 URL 不起作用。不过,这个可以:backpan.perl.org
    • install MSCHWERN/Test-Simple-0.62.tar.gz @Schwern 我认为你需要去掉 M/MS 前缀才能找到压缩包
    • @TomH 任何一种风格似乎都有效,但你是对的,你的风格是有记录的,而且更简单。请注意,除非您使用 BackPAN URL,否则任何一个都不适用于 Test-Simple-0.62.tar.gz。
    • @Chloe 已修复
    【解决方案2】:
    cpan install App::cpanminus
    cpanm Your::Module@1.23
    

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

    【讨论】:

    • 这是一个很好的答案,具体说明如何“安装 a 特定版本的 a Perl 模块”(问题曾一度出现) .特别是如果您已经在使用 cpanm。
    • 完美:在 debian-> aptitude install cpanminus
    • 要修复错误Can't configure the distribution,您需要运行sudo apt-get install build-essential。感谢您的回答!
    【解决方案3】:

    完全按照您的要求制作您自己的 CPAN 镜像。 Stratopan.com 是一项服务,Pinto 是基于其构建的工具,可以帮助您做到这一点。

    CPAN 工具仅安装任何发行版的最新版本,因为 PAUSE 仅索引最新版本。但是,您可以创建自己的私有 CPAN,它具有您想要的分布。一旦你有了自己的 CPAN 镜像,只包含你想要的,你将 CPAN 工具指向那个镜像,这样它就只安装那些版本。稍后会详细介绍。

    现在,您想要拥有多个版本。您可以根据需要创建任意数量的镜像,也可以将镜像置于源代码管理中,以便查看您喜欢的任何版本的镜像。

    CPAN::Mini::Inject 等工具可以帮助您设置自己的 CPAN。查看my talks on Slideshare 获取基本示例,查看my videos on Vimeo 获取一些演示。查看标题中包含“CPAN”或“BackPAN”的任何内容。我想我可能在The Perl Review 也有一些关于它的东西,或者应该在下一个问题。 :)

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

    另外,我最近发布了CPAN::PackageDetails,它可以帮助您构建正确的索引文件。它也仍然有点年轻,但同样,如果您需要一些特别的东西,尽管问。

    【讨论】:

    • 谢谢布赖恩,我目前正在建立一个本地迷你 cpan,然后我将注入我们的本地模块 + 那些我需要降级到特定版本的模块。
    【解决方案4】:

    [已经过去了将近 5 年,这是一个问得好、回答得好的问题,有很多观点。由于此页面仍必须出现在 Google 搜索中,因此更新不会有什么坏处。]

    Carton 这里值得一提。 Carton 是一个相对较新的工具,与App::cpanminus、App::cpanoutdated、perlbrew、等风格相同。 al. 作者(Miyagawa)称其为“alpha”质量,但即使在其当前状态下,carton 也有助于简化跨机器的版本调整模块的多个环境的维护。

    Pinto 也是与某些回复相关的另一个最新工具(事实上,其中一位受访者是贡献者)。

    【讨论】:

      【解决方案5】:

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

      免责声明:我经营 Stratopan。

      【讨论】:

        【解决方案6】:

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

        这样做的好处是能够快速/轻松地调整文件以测试在开发或暂存环境中升级特定模块 - 这是私有 CPAN 镜像不允许您做的事情(无需创建多个镜像)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-13
          • 1970-01-01
          • 2020-05-14
          • 1970-01-01
          • 2015-05-20
          • 2021-03-23
          • 2012-10-07
          • 1970-01-01
          相关资源
          最近更新 更多