gpt4 book ai didi

python - 当 pip 和 conda 重叠时该怎么办?

转载 作者:太空狗 更新时间:2023-10-29 20:17:56 25 4
gpt4 key购买 nike

我对 conda install 之间的区别有一个合理的理解& pip install ;如何pip仅安装 python 包 & conda可以安装非python二进制文件。但是,这两者之间存在一些重叠。这让我问:

是否使用的经验法则是什么 condapip什么时候都提供套餐?

例如,TensorFlow在两个存储库上都可用,但来自 tensorflow docs :

within Anaconda, we recommend installing TensorFlow with the pip install command, not with the conda install command.



但是,还有许多其他包重叠,例如 numpy , scipy等。

然而, this Stackoverflow answer建议 conda install应该是默认值 & pip仅当 conda 中的软件包不可用时才应使用.即使对于 TensorFlow 也是如此吗?或其他仅限 python 的软件包?

最佳答案

Tensorflow 维护者实际上在 PyPI 上发布了 TensorFlow 的轮子,这就是为什么它是推荐的官方方式。 conda包由 Anaconda 员工和/或社区创建。这并不意味着 conda 包不好,只是意味着 TensorFlow 维护者不参与其中(正式)。基本上他们只是说:“如果您在安装 pip 时遇到问题,TensorFlow 开发人员会尽力帮助您。但我们不正式支持 conda 软件包,因此如果 conda 软件包出现问题,您需要问问 conda 包的维护者。你已经被警告过了。”

在更一般的情况下:

对于仅限 Python 的包,您应该始终使用 conda install .可能会有异常(exception),例如,如果根本没有 conda-package 或 conda 包已过时(并且没有人发布该包的新版本)并且您确实需要该包/版本。

但是,对于需要编译的包(例如 C-Extensions 等),情况有所不同。这是不同的,因为与 pip您可以安装一个软件包:

  • 作为预编译轮
  • 作为包,在您的计算机上编译

  • 虽然 conda 只提供
  • 编译的 conda 包

  • 对于已编译的包,您必须注意二进制兼容性。这意味着一个包是针对另一个库的特定二进制接口(interface)编译的——这可能取决于库的版本或编译标志等。

    使用 conda,您必须按原样使用包,这意味着您必须假设这些包是二进制兼容的。如果不是,它将无法工作(段错误或链接错误或其他)。

    如果您使用 pip并且可以选择安装哪个轮子(如果有的话)或者针对 编译它可用 计算机上的库。这意味着您不太可能遇到二进制不兼容问题。如果您从不同的 conda channel 安装 conda 包,那是(或曾经)一个大问题。因为它们可能只是二进制不兼容(例如 conda-forge 和 anaconda-channel 在那里有或有一些问题)。

    然而,它可能应该根据具体情况来决定。我的 tensorflow 没有问题我安装的 conda 环境 全部 来自 conda-forge 的包裹 channel ,包括 tensorflow 。但是我听说有几个人在 中遇到了 tensorflow 的问题。混合 conda-forgeanaconda channel 环境。例如,来自主 channel 的 NumPy 和来自 conda-forge channel 的 TensorFlow 可能只是二进制不兼容的。

    我的经验法则是:
  • 如果它是一个仅限 Python 的包,只需安装它(不太可能出问题)。尽可能使用 conda 包,但如果使用 pip 不会造成(太多)麻烦。如果您使用 pip 安装它,它不是由 conda 管理的,因此它可能不会被识别为可用依赖项,您必须自己更新它,但这就是所有区别。
  • 如果它是一个编译包(如 C 扩展或 C 库的包装器等),它会变得有 pip 复杂。如果你想“小心”或者你有理由期待问题:
  • 如果您需要测试来自不同 channel 和/或 conda 和 pip 的编译包,请始终创建一个新环境。丢弃困惑的 conda 环境很容易,但修复您所依赖的环境要麻烦得多。
  • 如果可能,使用 conda install 安装所有已编译的包来自 唯一一个 channel (如果可能的话,主要的 anaconda channel )。
  • 如果不可能,请尝试将主 anaconda channel 编译包与来自不同 channel 的 conda 包混合。
  • 如果这不起作用,请尝试混合 conda 编译包和 pip 编译包(预编译轮子或自编译安装程序)。


  • 您问为什么不能使用 conda 从 PyPI 安装软件包.我不知道确切的原因,但 pip主要提供软件包,您必须自己安装。使用 conda,您将获得一个已编译并安装的软件包,该软件包无需安装即可“复制”。这要求软件包安装在不同的操作系统(Mac、Windows、Linux)和平台(32 位、64 位)上,针对不同的 Python 版本(2.7、3.5、3.6),可能还针对不同的 NumPy 版本。这意味着 conda 必须提供多个包而不是一个。这需要可能不可用或不可行的资源(最终安装包的空间和安装时间)。除此之外,可能没有将 pypi 包转换为 conda 配方的转换器,除了您必须了解一个包(编译、安装)才能使其工作的所有细节。不过这只是我的猜测。

    关于python - 当 pip 和 conda 重叠时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48157575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com