Conda vs. Pip vs. Virtualenv 命令对比
任务 | Conda 命令 | Pip 命令 | Virtualenv 命令 |
---|---|---|---|
安装包 | conda install $PACKAGE_NAME |
pip install $PACKAGE_NAME |
X |
更新包 | conda update --name $ENVIRONMENT_NAME $PACKAGE_NAME |
pip install --upgrade $PACKAGE_NAME |
X |
更新包管理器 | conda update conda |
Linux/macOS: pip install -U pip Win: python -m pip install -U pip |
X |
卸载包 | conda remove --name $ENVIRONMENT_NAME $PACKAGE_NAME |
pip uninstall $PACKAGE_NAME |
X |
创建环境 | conda create --name $ENVIRONMENT_NAME python |
X | cd $ENV_BASE_DIR; virtualenv $ENVIRONMENT_NAME |
激活环境 | conda activate $ENVIRONMENT_NAME* |
X | source $ENV_BASE_DIR/$ENVIRONMENT_NAME/bin/activate |
停用环境 | conda deactivate |
X | deactivate |
搜索可用包 | conda search $SEARCH_TERM |
pip search $SEARCH_TERM |
X |
从指定来源安装包 | conda install --channel $URL $PACKAGE_NAME |
pip install --index-url $URL $PACKAGE_NAME |
X |
列出已安装的包 | conda list --name $ENVIRONMENT_NAME |
pip list |
X |
创建依赖文件 | conda list --export |
pip freeze |
X |
列出所有环境 | conda info --envs |
X | 安装 virtualenv wrapper 后使用 lsvirtualenv |
安装其他包管理器 | conda install pip |
pip install conda |
X |
安装 Python | conda install python=x.x |
X | X |
更新 Python | conda update python* |
X | X |
备注:
conda activate
只适用于 Conda 4.6 及更高版本。在 Conda 4.6 之前的版本中,可以使用以下命令:- Windows:
activate
- Linux 和 macOS:
source activate
- Windows:
conda update python
会更新到该系列的最新版本,因此 Python 2.x 会更新到最新的 2.x 版本,Python 3.x 会更新到最新的 3.x 版本。
conda
conda
是一个开源的包管理器和环境管理器,最初由 Anaconda
提供,支持Python
以及其他语言(如 R、Ruby、Lua)的包管理。conda 不仅能安装和管理 Python 包,还能创建独立的虚拟环境,并安装其他语言的包。
Conda 命令
conda activate
:激活指定的 Conda 环境,使当前终端会话使用该环境的 Python 和库。conda clean
:清理 Conda 缓存,删除不再需要的包和索引,释放磁盘空间。conda compare
:比较不同环境中的包或包版本。conda config
:配置 Conda 的行为,例如设置源、代理等。conda create
:创建一个新的 Conda 环境,并指定环境中的 Python 版本及其他包。conda deactivate
:停用当前激活的 Conda 环境。conda doctor
:检查 Conda 环境并解决常见问题。conda env
:管理 Conda 环境,例如创建、导出环境等。conda info
:显示 Conda 环境和配置信息,包括已安装的环境列表。conda init
:初始化 Conda,使得 Conda 能够在终端中自动激活和管理环境。conda install
:安装指定的包及其依赖,支持从 Conda 仓库或指定的源安装。conda list
:列出当前环境中已安装的所有包及其版本。conda notices
:显示 Conda 系统的通知信息。conda package
:管理 Conda 包,例如安装、更新和删除。conda repoquery
:查询 Conda 仓库中的包信息。conda remove
:卸载指定的包。conda rename
:重命名 Conda 环境。conda run
:在指定的环境中运行命令。conda search
:搜索 Conda 仓库中的包。conda update
:更新指定环境中的包或 Conda 本身。
pip
pip
是 Python
的官方包管理工具,用于安装和管理 Python 包。它从 Python 包索引(PyPI)上下载并安装包
pip venv
venv
是 Python 内建的一个用于创建独立虚拟环境的工具。每个虚拟环境有自己的 Python 解释器和库集合,确保包之间的依赖不冲突。
区别
1. 总体
Pip:
- 用途:Pip 是 Python Packaging Authority 推荐的工具,用于从 Python 包索引(PyPI)安装 Python 软件包。
- 包类型:仅限于 Python 包,安装的包通常是
.whl
(wheel)格式,或者是源代码格式(需要编译)。 - 依赖管理:Pip 安装包时,不会检查环境中的所有包的依赖关系。它会按顺序递归安装依赖,可能会导致依赖冲突或破坏环境的稳定性。
Conda:
- 用途:Conda 是一个跨平台的包和环境管理工具,可以从 Anaconda 仓库或 Anaconda Cloud 安装包,支持安装和管理包含 C/C++ 库、R 包等在内的多种软件。
- 包类型:支持任何类型的软件包,不仅仅是 Python 包,还包括 C、C++、R 等。
- 依赖管理:Conda 使用 SAT 解算器来确保环境中所有包的依赖关系得到满足,因此可以避免安装包时出现的版本冲突问题。
2. 环境管理
- Pip:没有内建的环境管理功能,通常依赖
virtualenv
或venv
来创建虚拟环境来隔离不同的项目和包依赖。 - Conda:提供内建的环境管理功能,可以轻松创建和管理不同版本的 Python 及其包,适用于数据科学等领域,不同工具可能需要不同版本的 Python 或库。
3. 安装包时的依赖检查
- Pip:安装包时没有自动检查依赖,可能会导致环境破损,尤其是在包间依赖关系复杂时。
- Conda:使用 SAT 解算器自动检查依赖,确保安装的所有包的依赖关系都得到满足,减少环境破损的风险。
有时某些包只在 PyPI 上提供,而不在 Conda 仓库中。此时,使用 conda
安装可用的包,然后使用 pip
安装 PyPI 上的包。尽量优先使用 conda
安装包,尤其是那些包含底层依赖的包。只有在 conda
中找不到所需包时,再使用 pip
来安装 PyPI 上的包。Anaconda 仓库中提供了超过 1500 个包,包括最流行的数据科学、机器学习和 AI 框架。通过 conda 可以安装这些包,以及来自 conda-forge 和 bioconda 等频道的数千个额外包,所有这些都可以通过 conda 安装。尽管这些包的数量庞大,但与 PyPI 上超过 150,000 个包相比,它的数量仍然较少。偶尔会需要某些在 conda 中没有的包,但可以在 PyPI 上找到,并且可以通过 pip 安装。
特性 | Conda | Pip |
---|---|---|
支持的包类型 | 任何类型的软件包(Python、C、C++、R等) | 仅支持 Python 包 |
依赖管理 | 内建依赖检查,避免冲突 | 没有内建依赖检查,可能导致环境破损 |
环境管理 | 内建环境管理功能 | 依赖 virtualenv 或 venv 来创建环境 |
安装源 | Anaconda 仓库与 Cloud | PyPI |
是否需要编译器 | 不需要 | 需要,特别是从源代码安装时 |
包管理方式 | 包是预编译的二进制文件 | 包是源代码或 .whl 格式 |