在使用pip和conda时,是否也有过以下的疑惑???
目前只总结了以下常见的几种混淆,如有学者还有其它疑惑,欢迎留言讨论,我会解答更新,帮助自己理清的同时,也帮助其他同样困惑的学者,谢谢!
目录
pip与conda的联系与区别
pip 更轻量简单,conda 更全面强大。
pip 和 conda 都是 Python 的包管理工具,它们有联系也有区别:
联系
- 都可以用来安装、卸载和管理 Python 包。
- 都可以连接 PyPI 来安装 Python 包。conda 还可以连接 Anaconda cloud。
- 都可以导出当前环境的包信息。
- 都可以创建 Python 虚拟环境。
区别
- pip 是 Python 内置的,conda 属于 Anaconda/Miniconda 发行版。
- pip 只能管理 Python 包,conda 可以跨语言管理 Python、R 等语言的包。
- pip 不能直接管理不同的 Python 环境,conda 可以轻松管理多个环境。
- pip 依赖 Python,conda 可以单独存在。
- pip 安装源仅从 PyPI 获取,conda 可以从 Anaconda cloud 获取。
- pip 管理虚拟环境需要 virtualenv,conda 自带环境管理。
- pip 的组件更单一,conda 集成了包管理、环境管理等功能。
什么时候用pip,什么时候用conda
综合考虑项目需求,两者可以搭配使用,发挥各自的优势。
优先考虑使用 pip
- 当只需要安装 Python 包时。pip 更专注于 Python 包管理。
- 当系统中没有安装 Anaconda/Miniconda 时。pip 是 Python 的内置包管理工具。
- 当需要使用 Python 虚拟环境时。pip + virtualenv 可以方便管理虚拟环境。
- 当需要安装一些仅提供 wheel 文件的第三方库时。pip 对 wheel 文件支持更好。
- 当需要轻量级的包管理工具,或者对环境依赖不敏感时。pip 更轻量简单。
优先考虑使用 conda
- 当需要安装语言间依赖时,如 Python 和 R 包。conda 支持多语言包管理。
- 当需要跨操作系统移植环境时。conda 可以导出互通的环境配置。
- 当需要管理多个独立的 Python 环境时。conda 环境管理更便捷。
- 当需要避免环境依赖问题时。conda 对包依赖解析更全面。
- 当需要对系统级别的组件进行管理时。conda 可以安装一些系统级组件。
- 当需要使用 Anaconda 发行版中的其他功能时。conda 提供更全面的功能。
pip install 和conda install的区别
来源不同
- pip 是 Python 的默认包管理工具,与 Python 捆绑在一起。
- conda 是 Anaconda/Miniconda 发行版特有的包管理工具。
依赖管理差异
- pip 只能管理 Python 包的依赖。
- conda 可以跨语言管理 Python、R 等各种语言的包依赖。
环境管理差异
- pip 不能直接管理不同的 Python 环境。
- conda 可以方便管理多个独立的 Python 环境。
包来源不同
- pip 安装包默认都来自 Python Package Index (PyPI)。
- conda 安装包可以来自 Anaconda 自己的仓库,也可以来自 PyPI。
系统环境要求
- pip 对系统环境要求较低。
- conda 对系统环境有一定要求,需要预装 Miniconda/Anaconda。
同一虚拟环境下,pip list和conda list显示不一样
pip 和 conda 各有自己的包管理逻辑,所以在同一个环境下,从相同渠道安装同样的包,也可能因为各自的算法和规范不同,导致最后的安装包不一样。
-
pip 和 conda 默认使用不同的包仓库。pip 默认只访问 PyPI 上面的 Python 包,而 conda 默认同时访问 Anaconda仓库和 PyPI。
-
即使安装相同的包,由于 pip 和 conda 的依赖解析算法不同,安装的依赖包可能也不太一样。这会导致它们最后安装的组件不同。
-
对于一些跨语言的包,如 R 语言包,conda 可以识别安装,但 pip 识别不了这些非 Python 包。
-
一些只提供 wheel 格式文件的 Python 包,pip 可以直接安装,但 conda 可能需要从源代码编译安装。
-
pip 和 conda 的包版本探测算法不同,可能导致对同一个包安装不同版本。
-
在虚拟环境创建时,conda 会默认预装一些其认为重要的包,但 pip 不会。
-
pip 和 conda 的包名规范有少许差异,这也可能导致某些包METADATA信息不一致。