小编典典

当点和conda重叠时该怎么办?

python

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

是否使用condapip何时都提供包装的经验法则是什么?

例如,TensorFlow可在两个存储库上使用,但可从tensorflow
docs获得

在Anaconda中,建议您使用pip install命令而不是使用conda install命令安装TensorFlow 。

但是,有许多重叠的其他包一样numpyscipy等等。

但是,此Stackoverflow答案建议conda install应为默认值,并且pip仅应在软件包不可用时使用conda。即使对于TensorFlow或其他仅适用于python的软件包,也是如此吗?


阅读 209

收藏
2021-01-20

共1个答案

小编典典

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


在更一般的情况下:

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

但是,对于需要编译的软件包(例如C-Extensions等)而言,情况有所不同。有所不同,因为pip您可以通过以下方式安装软件包:

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

虽然conda只是提供了

  • 编译的conda包

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

使用conda时,您必须按原样使用软件包,这意味着您必须假定软件包是二进制兼容的。如果不是,它将不起作用(段错误或链接错误等)。

如果您使用,pip并且可以选择要安装的方向盘(如果有),或者根据计算机上的 可用
库进行编译。这意味着您不太可能遇到二进制不兼容的情况。如果您从不同的conda通道安装conda软件包,那将是(或曾经是)一个大问题。因为它们可能只是二进制不兼容的(例如,conda-
forge和anaconda-channel在那儿有或有一些问题)。

但是,应该根据具体情况决定。我的tensorflowconda环境没有问题,在那里我安装了通道中的 所有 软件包conda- forge,包括tensorflow。但是我听说有几个人在 混合 conda- forgeanaconda通道环境中对张量流有麻烦。例如,来自主通道的NumPy和来自conda-
forge通道的TensorFlow可能只是二进制不兼容的。

我的经验法则是:

  • 如果它是仅Python的软件包,则只​​需安装它(不太可能造成麻烦)。尽可能使用conda程序包,但使用pip不会造成很多麻烦。如果您使用pip来安装它,那么它就不会受到conda的管理,因此有可能它不会被识别为可用依赖项,因此您必须自己对其进行更新,但这就是所有区别。
  • 如果它是一个已编译的程序包(例如C扩展或C库的包装等),则它将变得更加复杂。如果您想“小心”或有理由期望出现问题,请执行以下操作:
  • 如果您需要测试来自不同渠道和/或conda和pip的编译包,请始终创建一个新环境。丢弃混乱的conda环境很容易,但是修复您所依赖的环境会很烦人。
  • 如果可能的话安装使用所有编译包conda install一个且只有一个 通道(如果可能的主要蟒蛇频道)。
  • 如果不可能,请尝试将主要的anaconda通道编译包与来自其他通道的conda包混合使用。
  • 如果这样不起作用,请尝试混合使用conda编译的软件包和pip编译的软件包(预编译的转轮或自编译的安装程序)。

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

2021-01-20