代码之家  ›  专栏  ›  技术社区  ›  Aaron N. Brock

pip和conda重叠时该怎么办?

  •  13
  • Aaron N. Brock  · 技术社区  · 7 年前

    我对 conda install & pip install ; 怎样 pip 安装仅限python的软件包; conda 可以安装非python二进制文件。然而,这两者之间有一些重叠。这让我想问:

    是否使用的经验法则是什么 康达 pip公司 何时双方都提供套餐?

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

    在Anaconda中,我们建议安装TensorFlow pip安装 命令,而不是 conda安装 命令

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


    然而 this Stackoverflow answer 表明 conda安装 应为默认值(&P); pip公司 仅当包在以下位置不可用时才应使用 康达 . 这是真的吗 张量流 或其他仅限python的软件包?

    1 回复  |  直到 7 年前
        1
  •  15
  •   MSeifert    7 年前

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


    在更一般的情况下:

    对于仅限Python的软件包,应始终使用 conda install . 可能会有例外,例如,如果根本没有康达软件包,或者康达软件包已经过时(并且没有人发布该软件包的新版本),而您确实需要该软件包/版本。

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

    • 作为预编译车轮
    • 作为软件包,在计算机上编译

    而康达只提供

    • 编译的conda包

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

    对于conda,您必须按原样接受包,这意味着您必须假设包是二进制兼容的。如果不是,则无法工作(segfault或链接错误或其他)。

    如果您使用 pip公司 并可以根据 可获得的 计算机上的库。这意味着二进制不兼容的可能性较小。如果您从不同的conda通道安装conda软件包,这是(或曾经是)一个大问题。因为它们可能只是二进制不兼容(例如,conda forge和anaconda channel存在或有一些问题)。

    然而,可能应根据具体情况作出决定。我的 tensorflow 我安装的conda环境 全部的 来自 conda-forge 渠道,包括tensorflow。然而,我听说有几个人在 混合的 康达锻造厂 anaconda 渠道环境。例如,主通道的NumPy和conda forge通道的TensorFlow可能只是二进制不兼容。

    我的经验是:

    • 如果它是一个纯Python的软件包,只需安装它(这不太可能造成麻烦)。尽可能使用conda软件包,但如果使用pip,则不会造成(太多)麻烦。如果您使用pip安装它,它不是由conda管理的,因此它可能不会被识别为可用的依赖项,您必须自己更新它,但这就是所有的区别。
    • 如果它是一个已编译的包(如C扩展或C库的包装器等),它会变得有点复杂。如果您想“小心”或有理由期待出现问题:
    • 如果需要测试来自不同通道和/或conda和pip的编译包,请始终创建一个新环境。丢弃一个乱七八糟的conda环境很容易,但修复一个您所依赖的环境要烦人得多。
    • 如果可能,请使用 conda安装 从…起 只有一个 渠道(如有可能,主要的水蟒渠道)。
    • 如果不可能,尝试将主anaconda通道编译包与来自不同通道的conda包混合。
    • 如果这不起作用,尝试混合使用conda编译包和pip编译包(预编译轮子或自编译安装程序)。

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