为什么同时使用conda和pip?

2024-04-19 00:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在这篇文章中,作者提出以下建议

To install fuzzy matcher, I found it easier to conda install the dependencies (pandas, metaphone, fuzzywuzzy) then use pip to install fuzzymatcher. Given the computational burden of these algorithms you will want to use the compiled c components as much as possible and conda made that easiest for me.

有人能解释一下为什么他建议使用Conda来安装依赖项,然后使用pip来安装实际的包,即fuzzymatcher?为什么我们不能同时使用Conda?另外,我们如何知道我们是否正在使用他建议的编译的C包


Tags: installpipthetouseasmatcher作者
3条回答

condaAnacondaMiniconda的包管理器(安装程序和卸载程序)

pip是Python的包管理器

根据您的系统环境和其他设置,pip和conda可以安装到同一个Python安装文件夹($PYTHONPATH/Lib/site-packages%PYTHONPATH%\Lib\site-packages)上。因此,conda和pip通常都能很好地协同工作

然而,conda和pip从不同的渠道或网站获得他们的Python包

  1. conda从官方频道搜索和下载:https://repo.anaconda.com/pkgs/

    • 该软件包由Anaconda正式支持,因此在该频道中维护

    • 然而,我们可能找不到每一个Python包或比官方频道更新版本的包。这就是为什么有时我们可能会从“conda forge”或“bioconda”安装Python包。这些是由开发者和其他友好用户维护的非官方渠道

    • 我们可以指定其他类似的频道:

      conda install <package1>  channel conda-forge
      conda install <package2>  channel bioconda
      
  2. pip搜索并从pypi下载

    • 我们应该能够在那里下载所有公开可用的Python包
    • 这些包由开发者和友好用户生成和上传
    • 每个包中的依赖项设置可能未经过完全测试或验证
    • 这些包可能不支持较旧或较新版本的Python

因此,如果您使用的是Python或迷你Python,则应使用Python。如果您无法从官方渠道找到特定的软件包,您可以尝试conda forge或bioconda。终于从pypi那里得到了

然而,如果你不使用Python,那么就坚持使用pip

对于高级用户,您可以从他们的源代码(如github、gitlab等)下载最新的库。但是有一个问题:

  1. 有些Python包是用纯Python编写的。在这种情况下,您应该没有问题将这些软件包安装到您的系统中

  2. 有些Python包是用C、C++、GO等编写的,在这种情况下,你需要

    • 适用于您的系统和Python环境的受支持编译器(32位或64位版本)
    • Python头文件、可链接的Python库和特定于已安装Python版本的归档文件。Anaconda在其安装中包括这些

我们如何知道Python包是否需要特定的编译器?

人们可能不容易找到答案。但是,您可以通过以下方式(可能是顺序)找到答案:

  1. 查看源存储库中的登录页(或README.ndREADME.txt文件)。
    例如,如果您转到Pandas's source repository,它将显示它需要cython,因此安装将需要一个C编译器

  2. 查看源存储库中的setup.py。 例如,如果您转到numpy's setup.py,它需要一个C编译器

  3. >P>查看使用编译程序语言编写的源代码的数量(如C、C++、GO等),例如,使用35.7%的C、1%的C++编写NoMyP库。然而,这只是一个指南,因为这些源代码可能只是测试例程。p>

Languages used in numpy

  1. 请进

对于已编译的C包,您可以导入一个包,查看它的位置,并检查包本身以查看它导入的内容。在某个时刻,您将读入已编译模块的导入(.so-extension on*nix)。可能有一种更简单的方法,但这可能取决于在包的导入序列中加载编译模块的位置

Fuzzymatcher可能无法通过Conda使用,或者只能使用过时的版本,或者只能使用与过时的依赖项集匹配的版本。然后你可能会得到一套过时的软件包。Pip可能有一个更新版本的fuzzymatcher,并且可能不太关心(不管是好是坏)您环境中各种其他软件包的版本。我不熟悉fuzzymatcher,所以我不能给你一个确切的原因:你必须问作者

请注意,在使用Conda安装必要的软件包时,该段的要点是,某些软件包需要(C)库(不需要编译的软件包,尽管它们取决于这些库),默认情况下可能不会安装在您的系统上。康达将为您安装这些;皮普不会

其他的答案已经解决了Conda如何更好地管理非Python依赖项的问题。至于为什么要使用Pip,在本例中并不复杂:当文章撰写时,fuzzymatcher包在Conda上不可用(2020年2月18日)。该方案的第一个也是唯一一个版本是2020年12月1日的uploaded on Conda Forge

除非想要一个更旧的版本(<;0.0.5),现在可以只使用Conda。接下来,Conda Forge's Autotick Bot将自动提交请求,并在推送到PyPI时构建包的任何新版本

相关问题 更多 >