【问题标题】:Conflict resolution in pip vs. condapip 与 conda 中的冲突解决
【发布时间】:2021-10-06 21:45:27
【问题描述】:

我假设 pip 和 conda 尽管存在差异,但它们都是包管理器并检查环境中安装的包的一致性!不过,就我而言,我有一个 requirements.txt 列表,位于 python=3.6 之上。在我的 conda 虚拟环境中,我一一安装了它们。奇怪的是,当在 anaconda.org 频道中找到一些软件包并使用 conda install 安装它们时,conda 会抱怨!例如,当我尝试安装 statistics=1.0.3.5 时,我在终端上收到此消息:

UnsatisfiableError: The following specifications were found
to be incompatible with the existing python installation in your environment:

Specifications:

  - statistics=1.0.3.5 -> python[version='2.7.*|<3|>=2.7,<2.8.0a0']

Your python: python=3.6

但是,当我使用 pip 时,它起作用了!

为什么会这样

我会在使用这个包的过程中遇到问题吗?

我阅读了这个 Stackoverflow post 关于 pip 和 conda 之间的区别,并试图从 doc 中理解它(虽然没有那么成功)。

【问题讨论】:

  • 请注意,statistics 包是 Python 3.4 中引入的the standard library module 的反向移植。它仅设计为安装在 Python 2 中,因为它已经是 Python 3.4+ 的一部分,即看起来 Conda 工作正常。不知道通过 Pip 安装它的后果是什么。

标签: python pip anaconda conda


【解决方案1】:

在使用 conda 虚拟环境时,使用 pip 安装软件包应该是最后的手段。如果某个包无法通过默认渠道获得,请先尝试从 conda-forge 安装。

conda 和 pip 之间的区别是巨大的(更不用说虚拟环境了):Conda 旨在安装一组一致的包 - 这会导致优化问题 - 而 pip 只是安装依赖项,无论这是否与任何以前安装的软件包。

但是,由于您正在使用代码编写单元测试,因此如果遇到问题,您会立即意识到。

【讨论】:

  • 感谢@Peter 的回答。但是,正如我所提到的,conda 在添加适当的频道后拒绝安装此版本的软件包!所以,如果你不介意,让我问这个。 “Conda 旨在安装一组一致的软件包,而 pip 只是安装依赖项,无论这是否与任何先前安装的软件包冲突。”那么您介意解决我在以下 cmets 中的困惑吗?
  • 1-假设我有包'A',它依赖于包B=1' and try to install package C`,它依赖于包B=2。我想这是我会有“冲突”的时候!对吗?
  • 2- 如果 1 为真,与 Specifications 冲突意味着什么,在我的情况下为 python=3.6?目前,我可以在 python shell 中import statistics
  • 3-如果 1 为真,我假设 conda 只是拒绝从您的回答中安装包 C!在这种情况下 pip 做了什么?只需根据安装的最新软件包的依赖关系更新软件包B?!他们我认为我会对包裹A 有问题!对吗?
猜你喜欢
  • 2023-03-20
  • 2021-09-09
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多