我经常遇到这种情况:我运行 brew install foobar
结果,Perl 版本得到更新。每当发生这种情况时,我已经安装的 Perl 模块不再被发现,因为它们安装在 /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.0/
中。并且新版本现在正在查看 /usr/local/Cellar/perl/5.32.0/lib/perl5/site_perl/5.32.1_1/
.
我已经/已经安装了大量与以前版本一起安装的模块,我宁愿不重新安装所有模块(至少手动安装)。让以前安装的模块与新的 Perl 版本一起工作的最佳方法是什么?
对于上面这么小的版本更改,我大概可以只复制 5.32.0
中的所有文件。目录 5.32.1_1
dir,但当版本更改更实质性时,最好有一个更通用和/或更健壮的解决方案。
最佳答案
cpan
命令可以制作一个“自动捆绑”文件。你会使用 cpan
从之前的安装中执行此操作:
$ cpan -a
Creating autobundle in /Users/brian/.cpan/Bundle
Reading '/Users/brian/.cpan/Metadata'
Database was generated on Fri, 19 Mar 2021 05:41:03 GMT
Package namespace installed latest in CPAN file
Algorithm::C3 0.11 0.11 HAARG/Algorithm-C3-0.11.tar.gz
Algorithm::Cron 0.10 0.10 PEVANS/Algorithm-Cron-0.10.tar.gz
Algorithm::Diff 1.1903 1.201 RJBS/Algorithm-Diff-1.201.tar.gz
...
version::regex 0.9924 0.9928 LEONT/version-0.9928.tar.gz
vmsish 1.04 1.04 SHAY/perl-5.32.1.tar.gz
warnings 1.47 1.47 SHAY/perl-5.32.1.tar.gz
warnings::register 1.04 1.04 SHAY/perl-5.32.1.tar.gz
Wrote bundle file
/Users/brian/.cpan/Bundle/Snapshot_2021_03_20_00.pm
在该文件的顶部,有安装说明。使用 cpan
从新安装处理这部分:package Bundle::Snapshot_2021_03_20_00;
$VERSION = '0.01';
1;
__END__
=head1 NAME
Bundle::Snapshot_2021_03_20_00 - Snapshot of installation on otter on Sat Mar 20 00:19:35 2021
=head1 SYNOPSIS
perl -MCPAN -e 'install Bundle::Snapshot_2021_03_20_00'
我几乎从来没有这样做过。当我安装一个新的 perl 并想在其上使用一个新项目时,我会安装该项目。该项目安装它需要的任何东西。我喜欢新的开始,而不是带着我可能不再使用的东西。另外,请注意
cpan
安装您所要求的任何内容的最新版本。如果您需要特定版本,cpanm
更容易处理。而且,在这种情况下,您可以考虑使用 cpanfile
锁定你想要的东西。
关于perl - 使用 homebrew 升级 Perl 版本时如何最好地处理以前安装的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66716801/