如何使用 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 skeleton
比conda 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?