cpan 和 cpanm 有啥区别? [复制]

Posted

技术标签:

【中文标题】cpan 和 cpanm 有啥区别? [复制]【英文标题】:What is the difference between cpan and cpanm? [duplicate]cpan 和 cpanm 有什么区别? [复制] 【发布时间】:2016-11-10 11:34:13 【问题描述】:

cpancpanm 命令有什么区别?

他们似乎都安装了perl模块,那么有什么区别呢?

【问题讨论】:

【参考方案1】:

cpan CPAN shell 大约从 1997 年开始与 Perl 一起发布。当您第一次运行它时,它会询问一堆问题并将答案保存在配置文件中。然后你可以通过运行来安装一个模块:

cpan -i Module::Name

shell 提供了其他用于搜索 CPAN 和查看分发文件的命令。

由Jos Boumans 启动了一个名为 CPANPLUS(命令行中的cpanp)的项目,旨在创建一个更新、更好和更有功能的 CPAN shell,但它从未完全完成到最初设想的地步实现了。

与此同时,MIYAGAWA 决定 cpanp 试图做太多事情,而世界真正需要的是一个更简单的 shell,它less 并且问的问题更少(理想情况下根本没有)。他创建了App::cpanminus,它提供了cpanm 命令并完全按照他的意图进行操作。您可以使用它来安装模块(以及所有模块的依赖项),使用如下命令:

cpanm Module::Name

两者的主要区别在于,如果你有 Perl,你应该已经有cpan 命令。而你不会有 cpanm 除非/直到你安装它。

【讨论】:

那么用哪一个来安装模块呢? cpanm 更新更好吗? 使用您喜欢的任何一个 - 任何一个都可以。我会使用cpan -i App::cpanminus 安装cpanm,然后使用cpanm。我认为它更好,因为它更简单(当然不仅仅是因为它更新)。 @CJ7,实际上都没有安装任何东西。他们执行分发中包含的安装程序进行安装。因此,差异将主要是表面上的。我看不出安装cpanm 只是为了避免在第一次运行cpan 时按Enter 键 这两种工具都会从 CPAN 镜像下载所需的文件,解压缩分发包,然后启动 make/make 安装过程。您可以使用这些工具从 CPAN 安装模块。说“实际上都没有安装任何东西”是一种愚蠢的挑剔,几乎似乎是为了制造混乱。 这是一段有趣且内容丰富的历史,但 OP 询问 “cpan 和 cpanm 有什么区别”。你的回答出现在你帖子的末尾,并说“两者之间的主要区别是,如果你有 Perl,你应该已经有 cpan 命令”,所以它们几乎 相同 除非你必须安装cpanm。这是不正确的,我必须 -1【参考方案2】:

大多数现代 Perl 用户更喜欢 cpanm,因为它简单,主要是输出简洁。

使用cpan 可能会产生数百行输出,因为它会向您显示它正在执行的所有操作:下载、校验和、运行安装程序、解析、加载,等等。这同样适用于每个依赖项。

另一方面,cpanm 以更简洁和通用的方式告诉您它正在做什么,即:获取、配置、构建和测试,完成。

所以使用上的主要区别在于cpanm 抑制了很多(通常)不相关的信息。有时,当模块失败时,您可能需要更多信息。有一个 -v|--verbose 标志,基本上可以向您展示 cpan 的所有内容。

此外,当您尝试安装某些需要用户输入的模块时,它们似乎会“挂起”。那是因为要求您输入内容的输出被抑制了。您可以使用--interactive(或--verbose)标志来解决这个问题。

有关输出的比较,请参阅幻灯片 35-39 here 或幻灯片 37-41 here。 (这些来自同一个演示文稿。我只是复制链接以防万一离线。)

【讨论】:

“大多数现代 perl 用户更喜欢 cpanm,因为它简单,主要是输出简洁。” 这需要引用并且是答案的不必要部分。不用说你显然是cpanm 的粉丝,不能相信你会给出真实的说明。 “更简洁和通用的方式”肯定不能两者兼而有之? “一般”定义为“仅考虑或包括某物的主要特征或元素”。通过仅说明模块安装的主要元素,cpanm 的输出比cpan 的输出要简洁得多。

以上是关于cpan 和 cpanm 有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

慢慢有点感觉——linux perl模块安装cpanm -h cpanm [options] Module [...]

处置和关闭有啥区别? [复制]

StringBuilder 和 Stringbuffer 有啥区别? [复制]

IntentService 和 Service 有啥区别? [复制]

仿真和模拟有啥区别? [复制]

仿真和模拟有啥区别? [复制]