1. 共同点
pip 与 conda 都是包管理器,都可以在Anaconda中安装python的第三方包
2. 不同点
2.1 支持的编程语言
conda
conda是一个通用的包管理器,意思是什么语言的包都可以用其进行管理,自然也就包括Python了。即conda 是一个跨平台(支持linux, mac, win)的通用包和环境管理器,它除了支持python外,还能安装各种其他语言的包,例如 C/C++, R语言等。
pip
pip 是 python 官方推荐的包下载工具,但是只能安装python包.
2.2 包之间的依赖关系
conda
conda会检查当前环境下所有包之间的依赖关系,保证当前环境里的所有包的所有依赖都会被满足。
注:conda有严格的检查机制,它会保证你当前装的package安装好之后能work,但是,它只检查用conda安装过的package。例如,你新安装的package会依赖numpy ,不过你已经安装numpy(e.g., 1.19.2),但是用pip安装的,不好意思,它会认为你没安装,然后用conda再安装一个依赖版本的numpy(e.g., 1.18.5)。这个时候,两个numpy可能就打架了。并且你pip list与conda list显示的numpy版本可能不一致,结果不知道最后运行程序的时候调用了哪个版本的numpy。
pip
pip安装包时,尽管也对当前包的依赖做检查,但是并不保证当前环境的所有包的所有依赖关系都同时满足。当某个环境所安装的包越来越多,产生冲突的可能性就越来越大。
2.3 包的存储位置
conda
conda install xxx : 这种方式安装的库都会放在anaconda3/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。
pip
在conda虚拟环境下使用 pip install 安装的库:
pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,那么xxx会被安装到anaconda3/envs/current_env/lib/python3.x/site-packages文件夹中,如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中。
2.4 包的内容
conda
conda 里的软件包都是二进制文件,下载后即可使用,不需要经过编译.
pip
pip 里的软件包为wheel版或源代码发行版。wheel属于已编译发新版的一种,下载好后可以直接使用;而源代码发行版必须要经过编译生成可执行程序后才能使用,编译的过程是在用户的机子上进行的.
2.5 Repo源
conda
conda 从 Anaconda.org 上拉取数据。虽然Anaconda上有一些主流Python包,但在数量级上明显少于PyPI,缺少一些小众的包.
pip
pip 从PyPI(Python Package Index)上拉取数据。上面的数据更新更及时,涵盖的内容也更加全面.
2.6 环境隔离
conda
conda 有能力直接创建隔离的环境.
pip
pip 没有内置支持环境隔离,只能借助其他工具例如virtualenv or venv实现环境隔离。
2.7 conda 的槽点
国内用pip网速比conda快,即便是用了国内源的情况下(比如在清华源、阿里源等镜像下使用 conda 命令安装)。
3. 尽量使用conda
在Anaconda创建的新环境中,如果装多个packages,既用到conda,又用到pip,那就先conda 的都装好,再pip,如果能用一种装到底,就不要来回换着用。即 先尝试用 conda 安装,不行了再尝试使用 pip 安装。
大部分情况下,二者没有区别,怎么安装都可以work,不过,二者混着装各种package可能会导致环境无法使用,一直报错。
4. 建议使用 conda install -c conda-forge
假设安装 tensorboard
可以使用 conda install -c conda-forge tensorboard ,这条命令将从 Conda Forge 通道安装最新版本的 TensorBoard 及其依赖项到你的当前环境中。如果你需要安装特定版本的 TensorBoard,也可以通过指定版本号来实现,例如:
conda install -c conda-forge tensorboard=2.4.0
本文是总结网上的资料
参考:
https://blog.youkuaiyun.com/whc18858/article/details/127135973
https://www.zhihu.com/question/395145313