如何使用 anaconda conda 命令安装 PyPi 包

Posted

技术标签:

【中文标题】如何使用 anaconda conda 命令安装 PyPi 包【英文标题】:How to install PyPi packages using anaconda conda command 【发布时间】:2015-05-30 22:49:50 【问题描述】:

使用 Anacoda Python 发行版时,安装不能直接通过 Anaconda 获得的 PyPi 包的最佳方法是什么?目前我正在使用:

conda pipbuild [pypi_name]
conda install --use-local [package_spec]

但我不清楚这是否是最好的方法,以及conda update --all 是否会在更新可用时更新这些包。当 PyPi 已经存在时,我也不清楚 binstar 的意义。

【问题讨论】:

嗨。你有没有找到办法做到这一点?您能否分享详细的分步解决方案?谢谢 【参考方案1】:

我不同意接受的回复,并注意pip install [some-pypi-package] 通常是在 Conda 环境中安装 PyPi 包的最佳方式。

虽然包不会由 Conda 包管理器管理,但它们仍将由 Anaconda 环境管理。它将为活动的 Python 安装下载正确版本的包,并使用 pip 包管理器对其进行正确更新。

在使用 Anaconda 时,您应该尽可能在 pip 之前转向 conda,但在使用 pip 时不会失去使用 Anaconda 的任何可复制性优势。

Anaconda 最近发布了一个支持这一点的文档:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#using-pip-in-an-environment

【讨论】:

一个需要注意的问题:如果pip 包需要conda 已经安装的依赖项的不同版本,pip 将替换已安装的包,conda不会意识到它的包已被删除。对于一次性的脚本环境设置,这可能很好。对于您手动安装的环境,您可能会在一段时间后感到困惑。 缓解我上面提到的问题的一种方法:将pip freeze 的输出保存到constraints.txt,然后使用pip install -c constraints.txt <package> 安装pip。这将阻止pip 删除conda 包。它还将固定pip 包。通过查看标记为<pip> 的项目的conda list 的输出,可以将pip 包从constraints.txt 中过滤掉。 对于 Django 之类的东西,我将使用 Anaconda 设置一个虚拟环境,然后出于上述原因纯粹通过 pip 进行安装。纯 conda 最适合将使用 conda 通道的科学计算堆栈组合在一起。【参考方案2】:

如果你想为 PyPI 包构建 conda 包,推荐的方法是使用 conda skeleton pypi package 并在它创建的配方上使用 conda build package。要安装包,请使用conda install --use-local package(在此处和其他地方,package 是您要安装的 PyPI 包的名称)。

每次更新包时,您都需要更新配方。

您也可以使用pip 来安装这些软件包。有两个缺点:首先,这些包根本不会由 conda 管理。其次,如果您的默认 python 版本与您在 conda 中使用的 python 版本不同,这些包将不起作用。

【讨论】:

谢谢!愚蠢的问题:公寓管理包裹能给我带来什么?主要是依赖管理?自动更新?另外,为什么你描述的方法比我上面描述的更好? conda 管理事物让您受益于依赖管理。它还使得在 conda 环境中使用该包变得更加容易。更新不会“自动”发生(在某种意义上,您确实需要键入 conda update 才能发生)。至于为什么更可取,conda skeletonconda pipbuild 稳定得多。 conda.pydata.org/docs/using/… 中没有这样说,它只是说pip install x。这些说明应该更新吗? 安装包的最终命令:conda install --use-local package 请注意,您可能需要运行conda install conda-build 来获取conda skeleton 命令(我使用的是miniconda)。【参考方案3】:

自version 4.6.0 以来,Conda 改进了其与 pip 的互操作性:

Conda 和 pip 历来难以相处。点 没有尊重 Conda 的环境约束,而 Conda 一直 很高兴破坏 pip 安装的软件。一团糟。康达 4.6.0 添加了预览支持以实现更好的互操作性。通过这种互操作性,Conda 可以使用 pip 安装的包来满足 依赖项,甚至可以干净地删除 pip 安装的软件 在适当的时候用 Conda 包替换它们。还有空间 在 pip 和 Conda 成为笨拙的 BFF 之前进行改进,但我们希望 这是一个好的开始。此功能目前默认禁用 因为它可以显着影响 Conda 的性能。如果你愿意 试试看,你可以设置这个 condarc 设置:

conda config --set pip_interop_enabled True

因此,将 PyPI 包放入 conda 的方法(在撰写本文时)似乎是:

pip install <package>

如果您希望 conda 用自己的包替换 PyPI 包(如果可能),只需运行:

conda update --all

鉴于上述设置。 Conda 将自己的频道标记为比 pip 更高的优先级,因此包将被替换。

【讨论】:

CondaValueError: Key 'pip_interop_enabled' 不是已知的原始参数。 你的 conda 版本是什么?您可以通过conda --version查看。我想你的版本只是早于 4.6.0...

以上是关于如何使用 anaconda conda 命令安装 PyPi 包的主要内容,如果未能解决你的问题,请参考以下文章

如何在 conda 环境中安装 libsvm,以便可以在 anaconda 中导入 svm?

如何在 Anaconda (Conda) 环境中跟踪 pip 安装的软件包?

配置conda环境

在Mac终端下使用conda命令提示未找到命令conda

如何安装和初始设定并使用conda

Anaconda 使用conda常用命令