问题 如何使用CPANPLUS autobundle更新新版本的Perl?


我有Perl 5.13.4,其中包含大量已安装的CPAN模块。

我刚刚编译了Perl 5.14.0。我想将5.13.4中的所有模块安装(重新编译)到5.14.0中。

我可以使用'cpanp'和'b'选项生成一组已安装的模块;我现在有一个文件 ~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm

  • 在5.14.0版本的“cpanp”中使用的命令是什么,它将通过该快照包并确保5.14.0安装了所有这些模块?

  • 或者,如果cpanp和bundle的组合不是合适的方法,那么为新版本的Perl复制(重新编译)旧版本Perl中安装的模块的最简单方法是什么? (如果CPAN可以处理捆绑文件,我将使用它 - 这是我关心的结果,而不是用于实现它的机制。)

我确实快速查看了关于'perl cpanplus bundle'的问题列表,而没有找到我所追求的信息。我也曾多次查看'perldoc cpanp',但未能找到我所追求的信息。这与说“信息不存在”并不相同;它可能只是意味着我没有发现它。


10155
2018-05-23 17:06


起源



答案:


捆绑文件是CPAN特殊的东西 - 令我惊讶的是 - 在CPANPLUS中也不会发生。这就是为什么没有人谈论CPANPLUS捆绑,你找不到任何东西。所以使用CPAN。首先找出你的CPAN根目录,默认情况下是 ~/.cpan 要么 ~/.local/share/.cpan 在符合免费桌面XDG标准的系统上。相应地改变说明。

mkdir -p ~/.cpan/Bundle
mv ~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm ~/.cpan/Bundle
cpan Bundle::Snapshot_2011_05_18_00   # DTRT

正如你所说的那样 重新编译,CPAN有这个命令 并且您可以从CPAN shell或从命令行进行API调用来发出它,但只有在跨Perl版本的固定位置具有模块时它才有用。


8
2018-05-23 17:18



这很好用,谢谢。如果这是一个选项,我会给你额外的投票。我提到/指定'重新编译'表示我希望从源代码重建模块 - 一个解决方案,提供从新的Perl访问旧的,已编译的版本将无法满足我的要求。 - Jonathan Leffler


答案:


捆绑文件是CPAN特殊的东西 - 令我惊讶的是 - 在CPANPLUS中也不会发生。这就是为什么没有人谈论CPANPLUS捆绑,你找不到任何东西。所以使用CPAN。首先找出你的CPAN根目录,默认情况下是 ~/.cpan 要么 ~/.local/share/.cpan 在符合免费桌面XDG标准的系统上。相应地改变说明。

mkdir -p ~/.cpan/Bundle
mv ~/.cpanplus/5.13.4/dist/autobundle/Snapshot_2011_05_18_00.pm ~/.cpan/Bundle
cpan Bundle::Snapshot_2011_05_18_00   # DTRT

正如你所说的那样 重新编译,CPAN有这个命令 并且您可以从CPAN shell或从命令行进行API调用来发出它,但只有在跨Perl版本的固定位置具有模块时它才有用。


8
2018-05-23 17:18



这很好用,谢谢。如果这是一个选项,我会给你额外的投票。我提到/指定'重新编译'表示我希望从源代码重建模块 - 一个解决方案,提供从新的Perl访问旧的,已编译的版本将无法满足我的要求。 - Jonathan Leffler


CPANPLUS autobundles目前工作正常。请确保参考该套装'file://'作为捆绑的完整路径的前缀。

肯定会有一些与某些模块有关的函数,但在大多数情况下它应该是完全可行的。


2
2017-11-22 17:23



谢谢:我(最后)开始安装5.14.2,在5.14.1中创建快照后,我能够运行5.14.2 cpanp 并运行 i file:///Users/jleffler/.cpanplus/5.14.1/dist/autobundle/Snapshot_2012_05_04_00.pm 它确实起到了阅读文件和开始编辑的意义。我最终手动安装了 CPANPLUS 和 Module::Signature 由于缺少这些引起了一些问题,但是 file:// 前缀是我以前从未见过的关键信息。再次感谢。 - Jonathan Leffler


一些额外的信息,可以挽救其他人一些头发撕裂。

  1. 如果您有快照文件 $HOME/Snapshot_2013_12_23_00.pm,你可以运行:

    cpanp -i file://$HOME/Snapshot_2013_12_23_00.pm
    

    然后安装就会开始。

  2. 执行此操作时,Perl将创建一个文件,例如:

    $HOME/cpan/authors/id/UNKNOWN-ORIGIN/Snapshot_2013_12_23_00.pm
    

    (具体位置取决于您配置CPANPLUS存储库的位置;我的进入 $HOME/cpan。)

    如果您需要破解快照文件(因为某些模块无法编译),您可以在命令行上编辑和指定文件名,直到您脸部呈蓝色并完全无毛,并且它不会造成任何影响。因为尽管你告诉它要看 $HOME,CPANPLUS正在查看它复制到UNKNOWN_ORIGIN目录中的文件。删除文件肯定有效;你也可以编辑它。


0
2017-12-24 07:27