【问题标题】:Why use both conda and pip? [duplicate]为什么同时使用 conda 和 pip? [复制]
【发布时间】:2021-05-23 15:26:31
【问题描述】:

在这个article,作者建议如下

要安装模糊匹配器,我发现 conda 安装更容易 依赖项(pandas、metaphone、fuzzywuzzy)然后使用 pip 安装 模糊匹配器。考虑到这些算法的计算负担,您 将希望尽可能多地使用编译后的 c 组件,并且 conda 对我来说是最简单的。

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

【问题讨论】:

标签: python pip conda


【解决方案1】:

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

除非想要一个旧版本 (现在可以直接使用 Conda。展望未来,Conda Forge's Autotick Bot 将自动提交拉取请求并构建任何新版本的包,只要它们被推送到 PyPI。

【讨论】:

    【解决方案2】:

    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. pypipip 搜索和下载

      • 我们应该可以在那里下载所有公开可用的 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's source repository,它表明它需要cython,因此安装需要一个C编译器。

    2. 查看源存储库中的setup.py。 比如你去numpy's setup.py,它需要一个C编译器。

    3. 查看使用需要编译的编程语言(如 C、C++、Go 等)编写的源代码数量。例如,numpy 库使用 35.7% 的 C、1.0% 的 C++ 等编写. 但是,这只是一个指南,因为这些源代码可能只是测试例程。

    1. 在 stackoverflow 中提问。

    【讨论】:

      【解决方案3】:

      对于已编译的 C 包,您可以导入一个包,查看它的位置,然后检查包本身以查看它导入的内容。在某些时候,您会读入已编译模块的导入(*nix 上的 .so 扩展名)。可能有一种更简单的方法,但这可能取决于编译模块在包的导入顺序中的哪个时间点被加载。

      Fuzzymatcher 可能无法通过 Conda 获得,或者只有一个过时的版本,或者只有一个与一组过时的依赖项匹配的版本。然后你可能会得到一组过时的包。 Pip 可能有更新版本的模糊匹配器,并且可能不太关心您环境中各种其他包的版本(无论好坏)。我对fuzzymatcher不熟悉,所以我不能给你一个确切的理由:你得问作者。

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

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 2014-01-26
        • 2016-04-25
        • 2020-09-16
        • 2018-12-13
        • 1970-01-01
        • 2017-06-02
        • 2016-05-28
        • 2019-07-23
        相关资源
        最近更新 更多