2011-05-23 71 views
11

我有Perl 5.13.4与大量的已安装的CPAN模块集合。如何使用CPANPLUS autobundle更新Perl的新版本?

我刚刚编译过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',但没有找到我以后的信息。同样说“信息不存在”;它可能仅仅意味着我没有发现它

回答

8

捆绑文件是一个CPAN特殊的东西, - 令我惊讶 - 不会发生也工作在CPANPLUS中。这就是为什么没有人谈论CPANPLUS捆绑包,你找不到任何东西。所以聘用CPAN。首先找出您的CPAN根目录,默认情况下,它位于免费桌面XDG兼容系统上的~/.cpan~/.local/share/.cpan。相应地修改说明。

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 

当你在谈论recompile, CPAN has that command,你可以从CPAN命令或者在命令行API调用发出的,但前提是你必须在整个的Perl的版本中的固定位置的模块是有用的。

+0

这很好,谢谢。如果这是一个选项,我会给你额外的票数。我提到/指定'重新编译'以表明我期望从源重建模块 - 一种解决方案提供从新Perl中访问旧的,已编译的版本将不符合我的要求。 – 2011-05-23 19:30:12

2

CPANPLUS autobundles从现在开始工作正常。只要确保在软件包的完整路径前面加上'file://'即可。

肯定会有一些diddlin,你将不得不处理一些模块,但大多数情况下它应该是完全可行的。

+0

谢谢:我已经(终于)开始安装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://'前缀是我以前从未见过的关键信息。再次感谢。 – 2012-05-04 14:59:06

0

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

  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目录中的文件。删除文件当然有效;你也可以编辑它。