什么是包管理器?
包管理器(package manager)是一种工具,它允许用户在操作系统上安装、删除、升级、配置和管理软件包。软件包管理器可以是像 软件中心 这样的图形化应用,也可以是像 apt-get 或 pacman 这样的命令行工具。
什么是软件包?
通常指的是一个应用程序,它可以是一个 GUI 应用程序、命令行工具或(其他软件程序需要的)软件库。包本质上是一个存档文件,包含二进制可执行文件、配置文件,有时还包含依赖关系的信息。
包管理器是如何工作的?
2、操作系统的包管理器几乎所有的 Linux 发行版都有软件仓库,它基本上是软件包的集合。是的,可以有不止一个软件库。软件库包含不同种类的软件包。
软件仓库也有元数据文件,其中包含了软件包的信息,如软件包的名称、版本号、软件包的描述和软件仓库名称等。这就是你在 Ubuntu/Debian 中使用 apt show 命令所看到的。
你的系统上的包管理器首先会与元数据进行交互。包管理器在你的系统上创建了一个元数据的本地缓存。当你运行包管理器的更新选项(例如 apt update)时,它会通过引用仓库中的元数据来更新本地元数据缓存。
当你运行软件包管理器的安装命令(例如 apt install package_name)时,软件包管理器会引用这个缓存。如果它在缓存中找到了包的信息,它就会使用互联网连接到相应的仓库,并在你的系统上安装之前先下载包。
一个包可能有依赖关系。意思是说,它可能需要安装其他软件包。软件包管理器通常会处理这些依赖关系,并将其与你正在安装的软件包一起自动安装。
Ubuntu(全球热门发行版)
默认采用apt-get 作为包管理器
常见的命令如下:
apt-get updateapt-get upgradeapt-get installapt-get uninstallapt-get source
CentOS(大名鼎鼎的RedHat的社区版)
默认使用yum作为包管理器,用法与apt-get相似。
FreeBSD
默认使用pkg作为包管理器。
Fedora(对比Ubuntu有不一样的包管理)
默认使用dnf作为包管理器。
Red Hat Linux
RPM包管理器,一种用于互联网下载包的打包及安装工具,最早由红帽发行,后来开源。几乎所有的Linux发行版本都使用了这种形式的命令管理、安装、更新和卸载软件。
Windows
微软 Build 2021 开发者大会发布了 winget 1.0 版本。
可以再cmd中输入winget使用它。
在此之前,windows通过使用msi文件打包安装所需的数据库和系统依赖项。
也有比较有名的第三方如Chocolatey提供windows的包管理服务。
macOS
官方没有包管理器,最有名的第三方包管理器是Homebrew。
一款自由及开放源代码的软件包管理系统,用以简化macOS系统上的软件安装过程,最初由马克斯·霍威尔写成。因其可扩展性得到了一致好评,而在Ruby on Rails社区广为人知。 Homebrew使用GitHub,通过用户的贡献扩大对软件包的支持。
npm
是 Javascript 运行时 Node.js 的默认程序包管理器。
npm 由两个主要部分组成:用于发布和下载程序包的 CLI(命令行界面)工具和托管 Javascript 程序包的在线存储库。
yarn
由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具 ,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。
npm install的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules,重新install的时候依旧如此。同一个项目,安装的时候无法保持一致性。由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。
Yarn和npm命令对比
npm install === yarn npm install taco --save === yarn add taconpm uninstall taco --save === yarn remove taconpm install taco --save-dev === yarn add taco --devnpm update --save === yarn upgrade
pip
python的默认包管理器。
gem
Ruby的默认包管理器。
Nuget
.NET世界的包管理器,C#会经常用到。