【问题标题】:Package Manager vs Dependency Manager包管理器与依赖管理器
【发布时间】:2015-02-01 20:18:21
【问题描述】:

有什么区别?

在许多地方,它们可以互换用作同义词,但我认为它们是不同的。 简而言之,主要区别是什么?

【问题讨论】:

  • 那篇文章中的问答对我来说并不简短且易于理解。我想要关键的区别,经过长时间的研究,我找到了简短的答案并写下了。我想要的是当有人感到困惑并想快速查看时的答案。还是谢谢。

标签: dependency-management package-managers


【解决方案1】:

TLTR: 包管理器用于SYSTEM和依赖管理器用于PROJECT


包管理器 - 用于配置系统,即设置您的开发环境,通过这些设置您可以构建许多项目。

依赖管理器 - 特定于项目。您管理单个项目的所有依赖项,这些依赖项将保存在您的项目中。当你开始另一个项目时,你应该再次管理你的依赖关系。


示例:在 PHP 世界中,COMPOSER 作为依赖管理器,PEAR 作为包管理器。使用作曲家时,您的所有设置和扩展都是针对单个项目的,其中 pear 设置为 php 核心设置新的扩展和库。

【讨论】:

  • 我认为混淆来自 Python 世界,这些术语可以互换使用。这是有道理的,因为在 Python 中,您的项目依赖项是系统范围的全局包。这正是 conda 和 penv 等虚拟环境管理器出现的原因。
【解决方案2】:

Composer's website上有一个很好很简单的解释:

Composer 不像 Yum 或 Apt 那样是一个 包管理器。 是的,它处理“包”或库,但它在一个 基于每个项目,将它们安装在一个目录(例如供应商)里面 你的项目。默认情况下它不会全局安装任何东西。因此, 它是一个依赖管理器

【讨论】:

  • 但是有了composer,你也可以全局安装包!它是怎么计算的?
  • @rahul286 Composer 可以方便地全局安装,但这不是它的主要关注点或架构理念。这会影响依赖解析算法,例如,它在 Composer 和 NPM 中的行为不同。如果我没记错的话,Composer 会读取所有依赖解析树并尝试找到满足所有包约束的共同祖先包。如果它不能这样做,它就不会成功完成。我对 NPM 不熟悉,但我认为在 NPM 中你会得到每个版本的包,而不是一个共同的祖先。
  • 有趣的阅读:medium.com/learnwithrahul/…
猜你喜欢
  • 2017-09-30
  • 1970-01-01
  • 2020-08-11
  • 2022-08-12
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多