我的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'并且未能找到我所追求的信息。这与说“信息不在那里”并不相同;这可能仅仅意味着我没有发现它。)
答案 0 :(得分: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 shell发出它或者从命令行发出API调用,但只有在Perl版本的固定位置有模块时它才有用。
答案 1 :(得分:2)
CPANPLUS autobundles目前工作正常。请务必引用捆绑包,并在捆绑包的完整路径前加上“file://
”。
肯定会有一些diddlin'与某些模块有关,但在大多数情况下它应该是完全可行的。
答案 2 :(得分:0)
一些额外的信息可能会让其他人有些流泪。
如果您有快照文件$HOME/Snapshot_2013_12_23_00.pm
,则可以运行:
cpanp -i file://$HOME/Snapshot_2013_12_23_00.pm
,安装将开始。
执行此操作时,Perl将创建一个文件,例如:
$HOME/cpan/authors/id/UNKNOWN-ORIGIN/Snapshot_2013_12_23_00.pm
(具体位置取决于您配置CPANPLUS存储库的位置;我的进入$HOME/cpan
。)
如果您需要破解快照文件(因为某些模块无法编译),您可以在命令行上编辑和指定文件名,直到您脸部呈蓝色并完全无毛,并且它不会使最轻微的差异,因为尽管你告诉它查看$HOME
,CPANPLUS正在查看它复制到UNKNOWN_ORIGIN目录中的文件。删除文件肯定有效;你也可以编辑它。