跳转至

包管理

基本概念

包管理器,顾名思义就是 管理

这里所说的 含义很广泛,包括但不限于

  • 代码库/框架
  • 命令行工具
  • 开发环境组件
  • 日常使用的软件

管理 的含义也很丰富,包含了很多操作,比如

  • 安装包
  • 卸载包
  • 升级包

开发人员经常需要使用包管理器。因为遇到存在复杂依赖的情况时,不太可能手动管理。以下是一些可能要使用包管理器的场景

  • 对于较大型的软件项目,第三方依赖会很复杂
  • 对于类 UNIX 系统,系统本身的依赖就很复杂

分类

不同的包管理器 管理 包的方式可能不同,我大致总结了 3 种类型

  • 在项目本地根据清单/锁文件来管理包
  • 创建、激活不同的环境来管理包
  • 用户级或系统级全局管理包

当然了,大多数包管理器都不只支持一种包管理方式

本文不会对包管理器进行复杂的细分,只如下简单分类

  • 语言包管理器,和特定编程语言有关,主要管理代码库/框架,偶尔也管理命令行工具。
  • 系统包管理器,和特定编程语言无关,可管理命令行工具、开发环境组件、日常使用的软件,偶尔也能管理 C/C++ 的代码库/框架

语言包管理器

系统包管理器

Windows

  • scoop 严格地说更像安装器,因为 windows 系统依赖不会很复杂,软件通常都是单独在一个目录里安装,并附带了所有的运行时依赖,因此手动安装不麻烦。不像 UNIX 系统,为了节省空间,程序都是动态链接的,不会单独一个目录里安装,而是散布在系统的各个角落,并疯狂地复用系统的运行时。scoop 在 windows 上主要用处就是让包的安装、卸载、升级更方便(好吧,这似乎是所有包管理器的主要作用)

Linux

  • homebrew 比系统自带的更好,用户级别的安装,不污染系统目录,不需要 sudo,包支持更丰富。