写代码离不开别人的开源库。早期引入第三方依赖全靠手动下载压缩包解压,一旦库版本更新或者出现多层依赖冲突,直接陷入依赖地狱。包管理器就是替我们自动下载、更新并梳理依赖关系的工具。

今天梳理一下各大主流语言和系统工具的核心区别与常用命令。


前端与 JS 生态

npm

Node.js 官方自带的默认包管理器,也是最大的包仓库,收录超过 200 万个包。初学前端最先接触的一定是它。

  • 优点:生态最全,开箱即用,所有教程默认通用。
  • 缺点:每个项目都要完整复制一份依赖,node_modules 文件夹体积大;扁平化安装容易出现幽灵依赖;早期安装速度较慢。
1
2
3
4
5
6
7
8
9
10
11
# 初始化项目
npm init -y

# 安装依赖
npm install <包名>
npm install -D <包名> # 安装为开发依赖

# 安装项目所有依赖与运行脚本
npm install
npm run <脚本名>
npm update

Yarn

Facebook 为了解决 npm 当时速度慢、版本不稳定的问题推出的工具。

  • 特点:率先引入了 yarn.lock 锁定文件,保证不同机器安装出来的依赖完全一致;支持离线缓存,下载过的包不用重复下载。
  • 注意:同一个项目切忌混用 npm 和 yarn,混用会导致锁文件冲突和依赖混乱。
1
2
3
4
5
6
7
# 添加依赖
yarn add <包名>
yarn add <包名> --dev

# 安装项目全部依赖与运行
yarn install
yarn <脚本名>

pnpm

名字里的 p 代表高性能,主打节省磁盘空间和规范依赖树。

  • 特点:全电脑只存一份包实体,通过硬链接和软链接组织每个项目的 node_modules。安装一次 React,其他项目直接复用,非常省空间。
  • 适用:特别适合多项目管理和 Monorepo 大仓。
1
2
3
4
5
6
7
8
# 全局安装 pnpm
npm install -g pnpm

# 基础使用
pnpm add <包名>
pnpm add -D <包名>
pnpm install
pnpm <脚本名>

Bun

不仅是包管理器,还是一个全新的运行时,用来替代 Node.js。

  • 特点:使用 Zig 编写,底层 I/O 做了极致优化,安装速度比 npm 快 10 到 20 倍;自带打包器、测试运行器,原生支持 TypeScript。
  • 适用:追求极致速度的新项目或探索型工具。
1
2
3
4
5
6
7
# 安装依赖
bun add <包名>
bun install

# 直接运行代码或测试
bun run index.ts
bun test

Python系列

pip

Python 官方标准包管理器,配合 PyPI 仓库使用。

  • 核心问题:默认是全局安装,项目一多极易发生版本冲突。
  • 规则:必须配合虚拟环境使用,用 venv 隔离每个项目的依赖。
1
2
3
4
5
6
7
8
9
10
11
12
# 创建并激活虚拟环境
python -m venv .venv

# Linux 与 macOS 激活
source .venv/bin/activate
# Windows PowerShell 激活
# .venv\Scripts\Activate.ps1

# 安装依赖与导出清单
pip install requests
pip freeze > requirements.txt
pip install -r requirements.txt

Conda

数据科学和机器学习领域的标配包与环境管理器。

  • 特点:不仅管 Python 包,还能管理底层 C/C++ 库和 CUDA 驱动等预编译二进制文件。安装 NumPy、Pandas、TensorFlow 这类带复杂底层编译的库时,比 pip 省心很多。
1
2
3
4
5
6
# 创建指定 Python 版本的独立环境
conda create -n ai_env python=3.10

# 激活环境并安装科学计算库
conda activate ai_env
conda install numpy pandas pytorch

uv

由 Astral 团队用 Rust 开发的新一代极速工具,正在快速席卷 Python 生态。

  • 特点:速度比传统 pip 快 10 到 100 倍,不仅完全兼容 pip 语法,还把 Python 解释器下载、虚拟环境创建和项目依赖锁定全包揽了。日常开发强烈建议优先尝试。
1
2
3
4
5
6
7
8
# 兼容替代 pip 极速安装
uv pip install requests

# 现代项目管理:自动下载依赖并锁定版本
uv add requests

# 无需手动激活环境,直接在隔离环境中运行脚本
uv run main.py

C与C++

C/C++ 的包管理是所有主流语言里公认最折腾的。因为没有官方统一标准,而且编译受编译器类型、编译参数、架构和二进制兼容(ABI)的严苛限制,导致直到今天都没有一个大一统的工具。

目前生态里主要分成三派:

  1. 野生流派:许多老项目完全不用包管理器,直接手动把第三方库源码拷进项目,或者用 Git Submodule / CMake FetchContent 在编译时现场拉源码。
  2. vcpkg 派:微软主导的源码驱动方案,是目前个人开发者和开源社区最流行的选择。
  3. Conan 派:主打预编译二进制包,配置门槛较高,主要在企业级 CI/CD 和大型跨平台工程中使用。

vcpkg

微软开源的跨平台包管理器,对 Windows、Visual Studio 和 CMake 体系支持最成熟。

  • 特点:本质上是一个庞大的编译脚本库。你让它装某个库,它会自动下载源码并在本地根据你的环境现编出静态或动态库,然后通过 CMake 工具链文件直接喂给你的项目。
1
2
3
4
5
# 安装开源库
vcpkg install fmt

# 配合 CMake 项目构建(传入 vcpkg 工具链文件)
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=[vcpkg路径]/scripts/buildsystems/vcpkg.cmake

Conan

JFrog 旗下的开源 C/C++ 二进制包管理器。

  • 特点:基于 Python 编写。与 vcpkg 默认在本地现场编译不同,Conan 强调直接下载打好的二进制包,避免了大型项目在本地漫长的编译等待,适合企业级私有依赖分发和持续集成。
1
2
# 生成依赖并安装预编译包
conan install . --output-folder=build --build=missing

Rust和Go

Cargo

Rust 官方标配的工程管理工具,体验公认极其丝滑。

  • 特点:把创建项目、代码编译、跑测试、生成文档和依赖管理全包了。依托 crates.io 仓库,开箱即用,无需额外折腾配置。
1
2
3
4
5
6
7
8
9
10
11
# 创建新项目
cargo new my_project

# 编译代码
cargo build # 调试编译
cargo build --release # 生产编译

# 运行与测试
cargo run # 编译并运行
cargo test # 运行单元测试
cargo check # 快速检查代码语法

Go Modules

Go 从 1.11 引入、1.13 成为标准的依赖方案。

  • 特点:没有中心化注册网站,依赖路径直接就是代码仓库地址;使用最小版本选择机制,写代码直接 import,执行命令自动分析下载,省心且不碍事。
1
2
3
4
5
6
7
8
# 初始化模块
go mod init my_module

# 下载指定依赖
go get github.com/gin-gonic/gin

# 自动清理无用依赖并补全缺失依赖
go mod tidy

Java和PHP

Maven

Java 企业级开发的长青树,2004 年至今依旧广泛使用。

  • 特点:采用 pom.xml 配置,强制标准项目目录规范。生态极其成熟,但在大型项目上 XML 冗长,全量编译偏慢。
1
2
3
4
5
# 常用构建命令
mvn clean compile # 清理并编译
mvn clean test # 运行测试
mvn clean package # 打包为 jar 或 war
mvn clean install # 安装到本地仓库

Gradle

Java、Kotlin 和 Android 的现代构建工具。

  • 特点:使用 Groovy 或 Kotlin DSL 代替 XML,支持增量构建与构建缓存,构建速度显著快于 Maven,是 Android 官方钦定的构建工具。
1
2
3
4
# 使用项目 Wrapper 构建与运行
./gradlew build
./gradlew test
./gradlew bootRun

Composer

PHP 现代化的核心支柱。

  • 特点:彻底改变了过去手动 include 文件的混乱局面,核心是 PSR-4 自动加载规范。现代 Laravel、Symfony 开发必备。
1
2
3
4
5
6
# 引入新依赖并安装
composer require guzzlehttp/guzzle
composer install

# 重新生成自动加载映射文件
composer dump-autoload -o

系统工具

Homebrew

macOS 和 Linux 上最常用的系统包管理器,装机必备。

  • 特点:Formula 管理命令行工具和数据库,Cask 管理带界面的桌面应用。软件安装在独立目录并通过软链接映射,不污染操作系统本身。
1
2
3
4
5
6
7
8
9
10
11
12
# 安装命令行工具与数据库
brew install python
brew install postgresql

# 安装带图形界面的桌面应用
brew install --cask visual-studio-code
brew install --cask google-chrome

# 日常维护更新
brew update
brew upgrade
brew cleanup

Linux 系统工具

除了面向开发语言和跨平台的工具外,Linux 各发行版都有自己的系统级包管理器,用于安装底层服务和运行环境。

apt

Debian 和 Ubuntu 系列的标配包管理器。

  • 特点:底层使用 dpkg 管理 .deb 二进制安装包,上层通过 apt 自动从软件源解析并下载所有关联依赖。日常运维使用最广泛。
1
2
3
4
5
6
7
8
# 更新本地软件源索引
sudo apt update

# 安装软件
sudo apt install nginx

# 升级所有已安装软件
sudo apt upgrade

dnf

Red Hat、CentOS Stream 和 Fedora 系列的现代包管理器。

  • 特点:底层使用 rpm 管理 .rpm 安装包。早期系统默认使用 yum,后来为了提升依赖解析速度和降低内存消耗,推出了基于 C 语言重构的 dnf。如今在现代 CentOS/RHEL 系统中,敲 yum 本质上也是软链接到 dnf。
1
2
3
4
5
# 安装软件
sudo dnf install nginx

# 检查可更新项并升级
sudo dnf upgrade

pacman

Arch Linux 及其衍生发行版的专属包管理器。

  • 特点:专为滚动更新系统设计,采用简单的压缩包格式,依赖解析和安装速度极快。配合 Arch 社区的用户软件仓库 AUR,几乎能装上任何开源软件。
1
2
3
4
5
# 同步软件源并升级整个系统
sudo pacman -Syu

# 安装软件
sudo pacman -S git

apk

Alpine Linux 的轻量级包管理器。

  • 特点:体积极小,执行速度飞快。因为 Alpine 常被用来制作极度轻量化的 Docker 基础镜像,所以我们在写 Dockerfile 时经常会用到它。
1
2
# 更新索引并安装软件,不保留本地缓存以减小镜像体积
apk add --no-cache curl

站内搜索

没有找到内容!