KaiSpace
tech

包管理器

linux和各种语言的包管理器

linux包管理器

APT 与 DPKG 的区别

APT(Advanced Package Tool)和 DPKG(Debian Package)都是 Debian 系列(包括 Ubuntu)系统中的包管理工具,但它们的作用和功能不同:

对比项APTDPKG
层级高级包管理工具低级包管理工具
功能处理依赖关系,自动下载和安装仅管理本地 .deb 包,不处理依赖
软件源通过 apt-getapt 命令从软件仓库获取包仅支持手动安装本地 .deb 文件
依赖管理自动解决依赖问题不会自动解决依赖,需要手动安装缺失的依赖
安装方式sudo apt install package_namesudo dpkg -i package.deb
卸载方式sudo apt remove package_namesudo dpkg -r package_name
更新系统sudo apt update && sudo apt upgrade不提供更新功能
修复缺失依赖sudo apt --fix-broken install需要手动安装缺失的依赖

APT 的特点

  1. 管理软件仓库

    APT 可以从官方仓库或第三方 PPA 直接下载并安装软件,例如:

    bash复制编辑sudo apt update  # 更新软件源
    sudo apt install package_name  # 安装软件
    sudo apt upgrade  # 更新所有已安装的软件
    
  2. 自动处理依赖
    APT 在安装软件时,会自动查找并安装所有必需的依赖项。

  3. 支持软件更新和系统升级

    bash
    
    
    复制编辑
    sudo apt full-upgrade  # 升级整个系统
    
  4. 提供高层封装
    APT 通过 apt-getapt 命令调用 dpkg 来完成实际的软件安装或卸载。

DPKG 的特点

  1. 仅能安装本地 .deb

    bash
    
    
    复制编辑
    sudo dpkg -i package.deb  # 安装 .deb 文件
    
  2. 不处理依赖问题

    如果缺少依赖,安装可能失败,并显示错误:

    bash复制编辑dpkg: error processing package_name (--install):
    dependency problems - leaving unconfigured
    

    需要手动安装依赖:

    bash
    
    
    复制编辑
    sudo apt --fix-broken install
    
  3. 用于低级管理

    • 列出所有已安装的

      .deb
      

      包:

      bash
      
      
      复制编辑
      dpkg -l
      
    • 显示特定软件包的详细信息:

      bash
      
      
      复制编辑
      dpkg -s package_name
      
    • 查看某个文件属于哪个软件包:

      bash
      
      
      复制编辑
      dpkg -S /usr/bin/package_name
      

python包管理器


1. pip(最常用)

pip(Pip Installs Packages)是 Python 的默认包管理器。

  • 适用范围:安装 Python 官方 PyPI(Python Package Index)上的第三方库。

  • 常见命令

    bash复制编辑pip install package_name  # 安装包
    pip install package_name==1.2.3  # 安装指定版本
    pip install -r requirements.txt  # 从文件安装多个包
    pip list  # 查看已安装的包
    pip show package_name  # 查看包的信息
    pip uninstall package_name  # 卸载包
    pip freeze > requirements.txt  # 生成当前环境的包列表
    
  • 适用于

    • 需要安装官方 PyPI 仓库中的 Python 包
    • 轻量级 Python 包管理

2. conda

conda 是 Anaconda 和 Miniconda 生态系统中的包管理器。

  • 适用范围

    • 不仅管理 Python 包,还可以管理 C/C++ 库、环境依赖(如 NumPy、Scipy、Pandas、TensorFlow)。
    • 支持创建独立的环境,避免软件冲突。
  • 常见命令

    bash复制编辑conda install package_name  # 安装包
    conda update package_name  # 更新包
    conda list  # 列出已安装的包
    conda remove package_name  # 卸载包
    conda create -n myenv python=3.8  # 创建 Python 3.8 的新环境
    conda activate myenv  # 进入环境
    conda deactivate  # 退出环境
    conda remove --name myenv --all  # 删除环境
    
  • 适用于

    • 机器学习、数据科学(如 TensorFlow、Scipy 依赖的 C 库)
    • 需要跨平台管理依赖(如 Windows 下的某些 C 库)

3.poetry

poetry 是现代 Python 包管理工具,支持 依赖管理 项目管理 (类似于 JavaScript 的 npm 或 Rust 的 Cargo)。

  • 适用范围

    • 解决 pip + virtualenv 组合的繁琐问题
    • 统一管理 pyproject.toml 依赖
  • 常见命令

    bash复制编辑poetry new myproject  # 创建新项目
    poetry add package_name  # 安装依赖
    poetry remove package_name  # 移除依赖
    poetry install  # 安装所有依赖
    poetry update  # 更新所有依赖
    poetry shell  # 进入虚拟环境
    
  • 适用于

    • 需要管理 Python 依赖的开发项目
    • 需要现代化依赖管理方案(避免 piprequirements.txt 的手动管理)

4. pipenv

pipenv 结合了 pipvirtualenv,提供了一种更简单的 Python 依赖管理方式。

  • 适用范围

    • 自动创建和管理虚拟环境
    • 替代 pip + virtualenv
  • 常见命令

    bash复制编辑pipenv install package_name  # 安装包
    pipenv install --dev package_name  # 安装开发环境依赖
    pipenv uninstall package_name  # 卸载包
    pipenv shell  # 进入虚拟环境
    pipenv lock  # 生成 lock 文件
    pipenv install  # 还原环境
    
  • 适用于

    • 需要自动管理虚拟环境的 Python 项目
    • 需要 Pipfile 代替 requirements.txt

5. virtualenv

virtualenv 用于创建独立的 Python 环境,防止不同项目的依赖冲突。

  • 常见命令

    virtualenv venv  # 创建虚拟环境
    source venv/bin/activate  # 激活环境 (Linux/macOS)
    venv\Scripts\activate  # 激活环境 (Windows)
    deactivate  # 退出环境
    
  • 适用于

    • 仅需创建独立 Python 环境,不需要 pipenv 的额外功能。

  1. pipx

pipx 用于全局管理 Python 命令行工具,避免影响系统环境。

  • 常见命令

    bash复制编辑pipx install package_name  # 安装可执行 Python 应用
    pipx list  # 查看已安装的工具
    pipx uninstall package_name  # 卸载工具
    
  • 适用于

    • 仅安装 CLI 工具(如 black, flake8, httpie
    • 避免影响全局 Python 依赖

总结

工具主要用途适用场景
pip安装和管理 Python 包标准包管理,适用于大部分情况
condaPython 及非 Python 依赖管理数据科学、机器学习、科学计算
poetry现代化依赖和项目管理需要 pyproject.toml 结构的项目
pipenv结合 pipvirtualenv需要自动管理虚拟环境
virtualenv创建独立 Python 运行环境需要手动管理虚拟环境
pipx安装独立的 Python 命令行工具需要运行全局 Python CLI 工具

如何选择?

  • 一般 Python 开发:用 pip
  • 数据科学 & 机器学习:用 conda
  • 现代化依赖管理:用 poetry
  • 简化虚拟环境管理:用 pipenv
  • 管理全局 CLI 工具:用 pipx
  • 仅创建虚拟环境:用 virtualenv

如果你是普通 Python 开发者,推荐使用 pippoetry 进行依赖管理,结合 virtualenvpipenv 进行环境管理。

虚拟环境

    1. 创建虚拟环境 python -m venv myenv
    2. 激活虚拟环境 source myenv/bin/activate(Linux/macOS)或 myenv\Scripts\activate(Windows)
    3. 在虚拟环境中安装包 pip install package_name
    4. 使用 pip freeze > requirements.txt 记录依赖
    5. 在新环境中恢复 pip install -r requirements.txt

这样做可以保证不同项目的依赖互不影响,避免系统 Python 依赖冲突,提升项目可移植性和可维护性。

虚拟环境的安装位置

当你使用 python -m venv myenv 创建一个虚拟环境时,它会被安装在当前目录下,具体路径如下:

虚拟环境的默认存放路径

默认情况下,venv 会在你运行命令的当前目录下创建一个名为 myenv(或你指定的名称)的文件夹,结构如下:

bash复制编辑/path/to/project/
│── myenv/  # 这是虚拟环境目录
│   ├── bin/ (Linux/macOS) 或 Scripts/ (Windows)  # 存放 Python 解释器和 pip
│   ├── lib/ (Linux/macOS) 或 Lib/ (Windows)  # 存放已安装的 Python 包
│   ├── include/  # C 头文件(通常用于编译 C 扩展)
│   ├── pyvenv.cfg  # 记录 Python 版本和路径
│── my_project/  # 你的项目文件

安装不同版本的python

如果不同项目需要不同版本的 Python,可以使用 pyenv 来管理并切换 Python 版本。以下是完整的操作步骤:


1. 安装pyenv

Linux/macOS

使用官方安装脚本:

bash


复制编辑
curl https://pyenv.run | bash

然后,添加 pyenv~/.bashrc~/.zshrc(如果使用 Zsh):

bash复制编辑export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

然后重新加载 Shell:

bash


复制编辑
exec $SHELL

Windows

Windows 需要安装 pyenv-win

powershell


复制编辑
winget install pyenv-win

安装后,关闭并重新打开终端。


2. 安装不同版本的python

使用 pyenv install 命令安装多个 Python 版本:

bash复制编辑pyenv install 3.10.5
pyenv install 3.9.13
pyenv install 3.8.12

查看已安装的 Python 版本:

bash


复制编辑
pyenv versions

示例输出:

pgsql复制编辑  system
  3.8.12
  3.9.13
* 3.10.5 (set by /home/user/.pyenv/version)

3. 设置全局python本本

如果你想让整个系统默认使用某个 Python 版本:

bash


复制编辑
pyenv global 3.10.5

然后检查 Python 版本:

bash


复制编辑
python --version

输出:

nginx


复制编辑
Python 3.10.5

4. 为某个项目设置特定的python版本

如果你希望不同项目使用不同的 Python 版本,可以在项目目录中使用 pyenv local 进行设置。

示例

假设你有两个项目:

bash复制编辑/home/user/projectA  # 需要 Python 3.9.13
/home/user/projectB  # 需要 Python 3.8.12

projectA 目录中:

bash复制编辑cd /home/user/projectA
pyenv local 3.9.13

projectB 目录中:

bash复制编辑cd /home/user/projectB
pyenv local 3.8.12

这样,每次进入 projectA,Python 版本会自动变成 3.9.13,进入 projectB,版本会变成 3.8.12

你可以在项目目录下查看 .python-version 文件:

bash


复制编辑
cat .python-version

输出示例:

复制编辑
3.9.13

5. 在虚拟环境中使用pyenv virtualenv(可选)

如果你想结合虚拟环境来管理不同项目的 Python 版本,可以安装 pyenv-virtualenv 插件:

bash复制编辑pyenv install 3.9.13
pyenv virtualenv 3.9.13 my_project_env  # 创建基于 Python 3.9.13 的虚拟环境
pyenv activate my_project_env  # 激活虚拟环境

然后,在项目目录中:

bash


复制编辑
pyenv local my_project_env  # 让项目自动使用该虚拟环境

这样,每次进入 projectA 目录,pyenv 会自动激活 my_project_env


6. 切换python版本

你可以随时使用 pyenv shell 临时切换 Python 版本:

bash


复制编辑
pyenv shell 3.8.12

这不会修改全局或本地设置,仅对当前终端有效。

如果想回到系统默认 Python:

bash


复制编辑
pyenv global system

javascript包管理器

1. npm(Node Package Manager,最常用)

npm 是 Node.js 自带的包管理器,也是目前最流行的 JavaScript 包管理工具。

安装 npm

  • npm 随 Node.js 一起安装,如果你安装了 Node.js,就已经有 npm 了。

  • 检查

    npm
    

    版本:

    bash
    
    
    复制编辑
    npm -v
    

常见命令

bash复制编辑npm init -y  # 初始化 package.json
npm install package_name  # 安装包
npm install package_name@1.2.3  # 安装特定版本
npm install package_name --save-dev  # 安装为开发依赖
npm install  # 安装 package.json 里定义的所有依赖
npm uninstall package_name  # 卸载包
npm update package_name  # 更新包
npm list  # 查看已安装的包
npm cache clean --force  # 清理 npm 缓存

适用于

  • 任何 JavaScript 项目
  • Node.js 后端开发
  • React、Vue、Angular 等前端框架

2. yarn(性能更优,适合大项目)

yarn 是 Facebook 开发的 npm 替代方案,提供更快的依赖安装更好的锁定机制

安装 yarn

如果已经安装 npm,可以直接安装 yarn

bash


复制编辑
npm install -g yarn

检查 yarn 版本:

bash


复制编辑
yarn -v

常见命令

bash复制编辑yarn init -y  # 初始化 package.json
yarn add package_name  # 安装包
yarn add package_name@1.2.3  # 安装特定版本
yarn add package_name --dev  # 安装开发依赖
yarn install  # 安装 package.json 里定义的所有依赖
yarn remove package_name  # 卸载包
yarn upgrade package_name  # 更新包
yarn cache clean  # 清理缓存

适用于

  • 需要更快的依赖管理(并行安装)
  • 需要更好的包版本锁定yarn.lock
  • 大型团队或 CI/CD(yarn 速度更快)

3. pnpm(超快,节省磁盘空间)

pnpm 是比 npmyarn 更高效的包管理器,特点是使用符号链接共享依赖,减少磁盘占用

安装 pnpm

bash


复制编辑
npm install -g pnpm

检查 pnpm 版本:

bash


复制编辑
pnpm -v

常见命令

bash复制编辑pnpm init  # 初始化 package.json
pnpm add package_name  # 安装包
pnpm add package_name@1.2.3  # 安装特定版本
pnpm add package_name --save-dev  # 安装开发依赖
pnpm install  # 安装所有依赖
pnpm remove package_name  # 卸载包
pnpm update package_name  # 更新包
pnpm store prune  # 清理不需要的包

适用于

  • 大项目或 monorepo(多个项目共享依赖)
  • 需要节省磁盘空间
  • 需要比 npmyarn 更快的安装速度

4. bun(极快的新型 JavaScript 运行时和包管理器)

bun 是一个比 Node.js 运行速度更快的 JS 运行时,同时带有内置包管理器npm 快 20 倍

安装 bun

bash


复制编辑
curl -fsSL https://bun.sh/install | bash

检查 bun 版本:

bash


复制编辑
bun -v

常见命令

bash复制编辑bun init  # 初始化 package.json
bun install package_name  # 安装包
bun install  # 安装 package.json 里的所有依赖
bun remove package_name  # 卸载包
bun update package_name  # 更新包
bun upgrade  # 更新所有包

适用于

  • 需要极快的包安装
  • 需要 Node.js 替代方案(bun 也是一个 JS 运行时)
  • 适合新项目实验

5. 比较 npmyarnpnpmbun

包管理器速度磁盘占用依赖管理适用场景
npm普通经典适用于所有项目
yarn中等好(yarn.lock适用于大团队
pnpm很快最省磁盘优秀适用于 Monorepo
bun最快中等现代适用于新项目

如何选择?

  • 一般项目npm
  • 大项目、团队协作yarn
  • 节省磁盘空间、超快安装pnpm
  • 需要极致速度、新技术尝试bun

如果不确定,推荐 pnpm(性能优秀,节省磁盘,速度快)。 🚀

nodejs版本管理

在开发多个 Node.js 项目时,可能会遇到不同项目需要不同的 Node.js 版本的情况。例如,项目 A 可能需要 Node.js 16,而项目 B 可能需要 Node.js 18。为了解决这个问题,使用 Node.js 版本管理器 是最佳方案。


1. 使用 nvm(最推荐,适用于 macOS/Linux)

nvm(Node Version Manager)是最流行的 Node.js 版本管理工具,支持安装、切换和管理多个 Node.js 版本。

安装 nvm

macOS/Linux

bash


复制编辑
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

然后,重新加载 Shell:

bash


复制编辑
source ~/.bashrc  # 或 source ~/.zshrc

Windows
Windows 用户可以安装 nvm-windows,下载 .exe 安装即可。


常见 nvm 命令

bash复制编辑nvm install 18  # 安装 Node.js 18
nvm install 16  # 安装 Node.js 16
nvm use 18  # 切换到 Node.js 18
nvm alias default 18  # 将 Node.js 18 设为默认版本
nvm list  # 查看已安装的 Node.js 版本
nvm uninstall 16  # 卸载 Node.js 16

为某个项目指定 Node.js 版本

在项目目录下创建 .nvmrc 文件,写入所需的 Node.js 版本:

bash


复制编辑
echo "16" > .nvmrc

然后在该目录运行:

bash


复制编辑
nvm use

这样,每次进入项目目录,nvm 会自动切换到 .nvmrc 指定的 Node.js 版本。


2. 使用 fnm(更快,适用于 macOS/Linux/Windows)

fnm(Fast Node Manager)是一个比 nvm 更快的 Node.js 版本管理器,特别适合大型项目。

安装 fnm

macOS(使用 Homebrew):

bash


复制编辑
brew install fnm

Linux(使用 curl 安装):

bash


复制编辑
curl -fsSL https://fnm.vercel.app/install | bash

Windows(使用 Scoop 安装):

powershell


复制编辑
scoop install fnm

常见 fnm 命令

bash复制编辑fnm install 18  # 安装 Node.js 18
fnm use 18  # 切换到 Node.js 18
fnm default 18  # 设为默认版本
fnm list  # 查看已安装的 Node.js 版本
fnm uninstall 16  # 卸载 Node.js 16

3. 使用 n(适用于 Linux/macOS)

n 是一个简单的 Node.js 版本管理工具,适合不想配置 nvm 的用户

安装 n

bash


复制编辑
npm install -g n

常见 n 命令

bash复制编辑n 18  # 切换到 Node.js 18
n install 16  # 安装 Node.js 16
n ls  # 查看已安装的版本
n rm 16  # 卸载 Node.js 16

注意n覆盖系统的 Node.js,不像 nvm 那样进行版本隔离,因此不适合需要多个项目使用不同 Node.js 版本的情况。


4. 使用 corepack(适用于 pnpmyarn

如果你使用 yarnpnpm,可以启用 corepack 来管理 Node.js 版本。

bash


复制编辑
corepack enable

然后在项目根目录的 package.json 中指定 Node.js 版本:

json复制编辑"engines": {
  "node": ">=18"
}

当你运行 yarnpnpm 时,它会自动检测并使用合适的 Node.js 版本。


5. nvmfnmn 之间的比较

工具适用系统速度是否隔离 Node.js 版本适用场景
nvmmacOS/Linux/Windows (nvm-windows)✅ 是适合所有用户(推荐)
fnmmacOS/Linux/Windows⚡ 超快✅ 是适合大项目、CI/CD
nmacOS/Linux普通❌ 否(覆盖系统 Node.js)适合简单使用
corepackmacOS/Linux/Windows❌ 否适合 yarnpnpm

最佳选择

  • 新手或通用开发者:✅ nvm
  • 需要更快速度(适合大项目、CI/CD):✅ fnm
  • 仅需简单管理(不隔离版本):✅ n
  • yarnpnpm 项目:✅ corepack

🚀 如果不确定,使用 nvm 是最稳妥的选择!

Comments

No comments yet.