在同一环境中使用 conda 和 pip install 是个坏主意吗?

Is that a bad idea to use conda and pip install on the same environment?

由于 conda installpip install 在很多情况下做的事情本质上是一样的,什么是最好的选择?有没有人应该只坚持 pip install 的情况?对称的,是否存在只应坚持 conda install 的情况?有没有办法在单一环境中同时使用 conda 和 pip install 来打击一个人的脚?

如果这两种方法在本质上是相同的并且不相互矛盾,那么就没有理由只坚持其中一种而不坚持另一种。

确实取决于您的环境的复杂程度。

对一些简单的包使用 pip 应该不会产生任何问题。 使用更多的 pip 安装会引发“为什么不使用 pip venv 呢?”的问题。

如果您没有做任何重要的事情,您可以混合安装 pip 和 conda。

这里有一个详尽的解释为什么混合它们可能不是一个好主意:Using Pip in a Conda Environment

不要在 conda 环境中混用 conda installpip install。也许,决定一劳永逸地使用 condavirtualenv+pip。以下是您如何决定哪一个最适合您:

  • Conda 在 conda 环境中安装各种(不仅是 python)conda-adopted 包。如果您喜欢环境,它会让您的环境变得正确。
  • Pip 在 Python 环境中安装 python 包(virtualenv 是其中之一)。它使您的 python 软件包安装正确。

使用 conda 的安全方法: 不要急于使用最新的东西并坚持使用可用的软件包,你会没事的。

使用 pip+virtualenv 的安全方法: 如果您发现依赖性问题或希望在打包后删除并清理 - 不要这样做。烧掉房子,放弃你的旧环境,创造一个新环境。一个命令行,2-5 分钟后,事情又会变得整洁。

Pip 是两者中最好的 安装Python 软件包的工具。由于 pip 包通常先出现,然后才被 conda 采用(由 conda 工作人员或贡献者)。有可能,在更新或安装 Python 的最新版本后,某些软件包只能通过 pip 获得。最新版本的包只能在 pip 中使用。并将 pip 和 conda 包混合在一起 can be a nightmare(至少如果你想利用 conda 的优势)。

Conda 在管理依赖项和复制环境方面是最好的。卸载软件包时,conda 可以自行清理并更好地控制冲突的依赖版本。此外,conda 可以导出环境配置,如果目前行星合适并且新机器没有太大差异,则可以在其他地方复制该环境。此外,conda 可以更好地控制环境,例如,可以在其中安装不同版本的 Python(virtualenv - 只有 Python 在系统中可用)。当您无法自由选择使用什么时,您总是可以 create a conda package

一些相关事实:

  • Conda 需要更多 space 和时间来设置
  • 如果您没有系统管理员权限,Conda 可能会更好
  • 当您没有系统时,Conda 会提供帮助Python
  • virtualenv+pip 会让你摆脱对这些细节的了解

一些过时的观念:

  • Conda 在过去(2012 年左右)曾经更适合新手开发人员。不再存在可用性差距
  • Conda 与 Continuum Analytics 的链接过多。现在 Conda 本身是开源的,包 - 没那么多。