cpan 和 cpanm 有啥区别? [复制]
Posted
技术标签:
【中文标题】cpan 和 cpanm 有啥区别? [复制]【英文标题】:What is the difference between cpan and cpanm? [duplicate]cpan 和 cpanm 有什么区别? [复制] 【发布时间】:2016-11-10 11:34:13 【问题描述】:cpan
和 cpanm
命令有什么区别?
他们似乎都安装了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 有啥区别? [复制]