包管理器
linux和各种语言的包管理器
linux包管理器
APT 与 DPKG 的区别
APT(Advanced Package Tool)和 DPKG(Debian Package)都是 Debian 系列(包括 Ubuntu)系统中的包管理工具,但它们的作用和功能不同:
| 对比项 | APT | DPKG |
|---|---|---|
| 层级 | 高级包管理工具 | 低级包管理工具 |
| 功能 | 处理依赖关系,自动下载和安装 | 仅管理本地 .deb 包,不处理依赖 |
| 软件源 | 通过 apt-get 或 apt 命令从软件仓库获取包 | 仅支持手动安装本地 .deb 文件 |
| 依赖管理 | 自动解决依赖问题 | 不会自动解决依赖,需要手动安装缺失的依赖 |
| 安装方式 | sudo apt install package_name | sudo dpkg -i package.deb |
| 卸载方式 | sudo apt remove package_name | sudo dpkg -r package_name |
| 更新系统 | sudo apt update && sudo apt upgrade | 不提供更新功能 |
| 修复缺失依赖 | sudo apt --fix-broken install | 需要手动安装缺失的依赖 |
APT 的特点
-
管理软件仓库
:
APT 可以从官方仓库或第三方 PPA 直接下载并安装软件,例如:
bash复制编辑sudo apt update # 更新软件源 sudo apt install package_name # 安装软件 sudo apt upgrade # 更新所有已安装的软件 -
自动处理依赖:
APT 在安装软件时,会自动查找并安装所有必需的依赖项。 -
支持软件更新和系统升级
:
bash 复制编辑 sudo apt full-upgrade # 升级整个系统 -
提供高层封装:
APT 通过apt-get或apt命令调用dpkg来完成实际的软件安装或卸载。
DPKG 的特点
-
仅能安装本地
.deb包:
bash 复制编辑 sudo dpkg -i package.deb # 安装 .deb 文件 -
不处理依赖问题
:
如果缺少依赖,安装可能失败,并显示错误:
bash复制编辑dpkg: error processing package_name (--install): dependency problems - leaving unconfigured需要手动安装依赖:
bash 复制编辑 sudo apt --fix-broken install -
用于低级管理
:
-
列出所有已安装的
.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 依赖的开发项目
- 需要现代化依赖管理方案(避免
pip和requirements.txt的手动管理)
4. pipenv
pipenv 结合了 pip 和 virtualenv,提供了一种更简单的 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的额外功能。
- 仅需创建独立 Python 环境,不需要
- pipx
pipx 用于全局管理 Python 命令行工具,避免影响系统环境。
-
常见命令:
bash复制编辑pipx install package_name # 安装可执行 Python 应用 pipx list # 查看已安装的工具 pipx uninstall package_name # 卸载工具 -
适用于:
- 仅安装 CLI 工具(如
black,flake8,httpie) - 避免影响全局 Python 依赖
- 仅安装 CLI 工具(如
总结
| 工具 | 主要用途 | 适用场景 |
|---|---|---|
pip | 安装和管理 Python 包 | 标准包管理,适用于大部分情况 |
conda | Python 及非 Python 依赖管理 | 数据科学、机器学习、科学计算 |
poetry | 现代化依赖和项目管理 | 需要 pyproject.toml 结构的项目 |
pipenv | 结合 pip 和 virtualenv | 需要自动管理虚拟环境 |
virtualenv | 创建独立 Python 运行环境 | 需要手动管理虚拟环境 |
pipx | 安装独立的 Python 命令行工具 | 需要运行全局 Python CLI 工具 |
如何选择?
- 一般 Python 开发:用
pip - 数据科学 & 机器学习:用
conda - 现代化依赖管理:用
poetry - 简化虚拟环境管理:用
pipenv - 管理全局 CLI 工具:用
pipx - 仅创建虚拟环境:用
virtualenv
如果你是普通 Python 开发者,推荐使用 pip 或 poetry 进行依赖管理,结合 virtualenv 或 pipenv 进行环境管理。
虚拟环境
-
- 创建虚拟环境
python -m venv myenv - 激活虚拟环境
source myenv/bin/activate(Linux/macOS)或myenv\Scripts\activate(Windows) - 在虚拟环境中安装包
pip install package_name - 使用
pip freeze > requirements.txt记录依赖 - 在新环境中恢复
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 是比 npm 和 yarn 更高效的包管理器,特点是使用符号链接共享依赖,减少磁盘占用。
安装 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(多个项目共享依赖)
- 需要节省磁盘空间
- 需要比
npm和yarn更快的安装速度
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. 比较 npm、yarn、pnpm、bun
| 包管理器 | 速度 | 磁盘占用 | 依赖管理 | 适用场景 |
|---|---|---|---|---|
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(适用于 pnpm 和 yarn)
如果你使用 yarn 或 pnpm,可以启用 corepack 来管理 Node.js 版本。
bash
复制编辑
corepack enable
然后在项目根目录的 package.json 中指定 Node.js 版本:
json复制编辑"engines": {
"node": ">=18"
}
当你运行 yarn 或 pnpm 时,它会自动检测并使用合适的 Node.js 版本。
5. nvm、fnm、n 之间的比较
| 工具 | 适用系统 | 速度 | 是否隔离 Node.js 版本 | 适用场景 |
|---|---|---|---|---|
nvm | macOS/Linux/Windows (nvm-windows) | 慢 | ✅ 是 | 适合所有用户(推荐) |
fnm | macOS/Linux/Windows | ⚡ 超快 | ✅ 是 | 适合大项目、CI/CD |
n | macOS/Linux | 普通 | ❌ 否(覆盖系统 Node.js) | 适合简单使用 |
corepack | macOS/Linux/Windows | 快 | ❌ 否 | 适合 yarn 和 pnpm |
最佳选择
- 新手或通用开发者:✅
nvm - 需要更快速度(适合大项目、CI/CD):✅
fnm - 仅需简单管理(不隔离版本):✅
n yarn或pnpm项目:✅corepack
🚀 如果不确定,使用 nvm 是最稳妥的选择!
Comments
No comments yet.