为什么要同时使用conda和pip?

14 浏览
0 Comments

为什么要同时使用conda和pip?

这个问题已经有了答案

pip和conda之间有什么区别?

在这篇文章中,作者建议采用以下方法:

为了安装模糊匹配器,我发现先通过conda安装依赖(pandas、metaphone、fuzzywuzzy),然后使用pip安装fuzzymatcher更简单。考虑到这些算法的计算负担,您需要尽可能多地使用编译后的C组件,而conda对我来说是最容易的。

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

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  --channel conda-forge
      conda install  --channel bioconda
      

  2. pip从pypi搜索和下载

    • 我们应该能够下载所有公开可用的Python包。
    • 这些包是由开发人员和友好用户生成和上传的。
    • 每个包中的依赖设置可能没有得到充分测试或验证。
    • 这些包可能不支持Python的旧版本或新版本。

    因此,如果你使用Anaconda或Miniconda,应该使用conda。如果在官方渠道中找不到特定的包,则可以尝试conda-forge或bioconda,最后从pypi获取。但是,如果不使用Anaconda,则使用pip。

    对于高级用户,可以从其来源(如github,gitlab等)下载最新的库。而这里有一个陷阱:

    1. 某些Python包是用纯Python编写的。在这种情况下,你不应该在系统中安装这些包时出现问题。

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

      • 系统支持的编译器以及Python环境(32位或64位,版本)。
      • 特定于已安装Python版本的Python头文件、可连接的Python库和存档文件。Anaconda在安装中包含这些文件。

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

    这可能不容易找到。但是,你可以通过以下方式找到(可能按顺序):

    1. 查看源代码库中的登录页面(或README.ndREADME.txt文件)。
      例如,如果你进入Pandas的源代码库,它将显示需要Cython,因此安装需要C编译器。

  3. 查看源代码库中的 setup.py
    例如,如果您转到 numpy的setup.py ,则需要C编译器。

  4. 查看使用需要编译的编程语言(例如C,C ++,Go等)编写的源代码量。例如,numpy库使用35.7%的C,1.0%的C ++等编写。但是,这仅供参考,因为这些源代码可能仅仅是测试例程。


    在numpy中使用的语言

    1. 在stackoverflow中提问。
0
0 Comments

其他回答提到了Conda如何更好地管理非Python依赖项。至于为什么要使用Pip,这里并不复杂:当文章编写时(2020年2月18日),fuzzymatcher包在Conda上不可用。该包的第一个和唯一版本于2020年12月1日在Conda Forge上上传。

除非想要使用旧版本(小于0.0.5),否则现在可以只使用Conda。未来,Conda Forge的Autotick Bot将自动提交拉取请求并在将包推送到PyPI时构建任何新版本的包。

0