为什么不更新所有CPAN模块?

时间:2018-10-04 14:04:00

标签: perl updates cpan

我认为通常最好定期更新计算机上的所有软件。由于CPAN模块不是由我的包管理器管理的,因此我认为我应该每隔一段时间执行一次cpan -u。只是在执行此命令后,我才阅读有关此内容的手册页注释:

-u  Upgrade all installed modules. Blindly doing this can really break
   things, so keep a backup.
  1. 为什么这会破坏任何东西?否则我应该如何使我的CPAN模块保持最新状态;我是否需要跟踪所有手动安装的模块(cpan似乎没有执行此操作)并仅定期更新这些模块?手动安装的模块的依赖性如何?
  2. 即使我还没有安装一个CPAN模块,为什么cpan -u仍要升级约15分钟?
  3. 我可以还原cpan -u吗?为此删除~/.cpan就足够了吗?

2 个答案:

答案 0 :(得分:13)

  

为什么这会破坏任何东西?

不应该,但是复杂的系统很复杂,有时候事情确实会中断(例如,如果使用非向后兼容的更改来更新模块,或者依赖于C语言库,该C语言库中的错误仅与特定版本结合显示)依赖项)。

  

否则我应该如何使我的CPAN模块保持最新状态; <​​/ p>

只要保留备份,以防万一。

  

为什么即使我未安装单个CPAN模块,cpan -u仍会在15分钟内升级内容?

Perl随large collection of modules一起分发,并且您的分发可能已经安装了其他模块。

  

我可以还原cpan -u吗?

您可以使用文档建议的备份覆盖它。

  

为此足以删除〜/ .cpan吗?

不。安装程序工具使用该目录来缓存有关可用模块的数据,存储源代码并保存构建工件。像其他任何库一样,已安装的文件将被写入您的lib

答案 1 :(得分:2)

  1. 新的或更新的代码是新的或更新的错误。我对昆汀有相反的看法:为什么改变一堆东西不让事情破裂?这就是我对大多数更新的期望。但是,Perl 5搬运工要竭尽全力地针对尽可能多的CPAN测试 perl 发行版。这并不意味着您对模块的特定使用(以及如何解决现有错误)是稳定的。

  2. perl随附的某些模块也在CPAN上。这些是“双重作用”模块,可能会从CPAN更新。

  3. cpan工具不会为您恢复任何内容,但是您有时可以做我想做的事情。使您的安装成为git repo。更改时分支。尝试使用您的代码的分支。如果有任何问题,您可以随时切换回主服务器。您甚至不需要提交更改! Pinto之类的工具可帮助您管理Perl模块集。


还有其他需要考虑的事情。

首先,我建议您不要使用系统 perl 。让系统执行此操作。如果您想自己管理一个较新的 perl ,请安装另一个。为此,您可能会喜欢perlbrew(我不是,但这没什么大不了的。)

您可以随意破坏它,而系统不会开始做奇怪的事情。考虑像removing . from @INCDeprecating unescaped left braces in regexes这样的主要变化。这些是 perl 中的更改,但它们打破了一些重要的内容。

第二,您可以将cpan配置为安装在系统目录之外的其他位置。 -I开关将为您使用local::lib。除此之外,您还可以configure it manually