我对conda install&pip install;之间的区别有一个合理的了解。如何pip安装仅python软件包并conda可以安装非python二进制文件。但是,这两者之间有些重叠。这使我问:
conda install
pip install
pip
conda
是否使用conda或pip何时都提供包装的经验法则是什么?
例如,TensorFlow可在两个存储库上使用,但可从tensorflow docs获得:
TensorFlow
在Anaconda中,建议您使用pip install命令而不是使用conda install命令安装TensorFlow 。
但是,有许多重叠的其他包一样numpy,scipy等等。
numpy
scipy
但是,此Stackoverflow答案建议conda install应为默认值,并且pip仅应在软件包不可用时使用conda。即使对于TensorFlow或其他仅适用于python的软件包,也是如此吗?
Tensorflow维护者实际上在PyPI上发布了TensorFlow的轮子,这就是为什么这是推荐的 官方 方式的原因。这些conda程序包由Anaconda员工和/或社区创建。这并不意味着conda程序包不好,仅意味着TensorFlow维护者不参与(正式)。基本上,他们只是说:“如果您pip在TensorFlow开发人员上安装时遇到困难,则会尝试为您提供帮助。但是我们并未正式支持这些conda软件包,因此,如果conda软件包出现问题,您需要询问conda软件包的维护者你已经被警告了。”
在更一般的情况下:
对于仅Python的软件包,应始终使用conda install。可能会有例外,例如,如果根本没有conda软件包或conda软件包已过期(并且没有人发布该软件包的新版本),并且您确实需要该软件包/版本。
但是,对于需要编译的软件包(例如C-Extensions等)而言,情况有所不同。有所不同,因为pip您可以通过以下方式安装软件包:
虽然conda只是提供了
对于已编译的软件包,必须注意二进制兼容性。这意味着程序包是根据另一个库的特定二进制接口编译的-这可能取决于库的版本或编译标志等。
使用conda时,您必须按原样使用软件包,这意味着您必须假定软件包是二进制兼容的。如果不是,它将不起作用(段错误或链接错误等)。
如果您使用,pip并且可以选择要安装的方向盘(如果有),或者根据计算机上的 可用 库进行编译。这意味着您不太可能遇到二进制不兼容的情况。如果您从不同的conda通道安装conda软件包,那将是(或曾经是)一个大问题。因为它们可能只是二进制不兼容的(例如,conda- forge和anaconda-channel在那儿有或有一些问题)。
但是,应该根据具体情况决定。我的tensorflowconda环境没有问题,在那里我安装了通道中的 所有 软件包conda- forge,包括tensorflow。但是我听说有几个人在 混合 conda- forge和anaconda通道环境中对张量流有麻烦。例如,来自主通道的NumPy和来自conda- forge通道的TensorFlow可能只是二进制不兼容的。
tensorflow
conda- forge
anaconda
我的经验法则是:
您询问为什么不能使用PyPI安装软件包conda。我不知道确切原因,但是pip通常会提供该软件包,您必须自己安装。使用conda,您可以得到一个已经编译并安装的软件包,而无需安装即可“复制”。这就要求该软件包必须安装在不同的操作系统(Mac,Windows,Linux)和平台(32位,64位)上,并针对不同的Python版本(2.7、3.5、3.6)以及可能针对不同的NumPy版本进行安装。这意味着conda必须提供多个软件包,而不仅仅是一个。这会占用可能不可用或不可行的资源(用于最终安装的软件包的空间和安装时间)。除此之外,除了您要了解的所有软件包(编译,安装)细节之外,可能没有将pypi软件包转换为conda配方的方法。不过那只是我的猜测。