ChatGPT解决这个技术问题 Extra ChatGPT

Conda 是否取代了对 virtualenv 的需求?

我最近在安装 SciPy 时发现了 Conda,特别是在我正在开发的 Heroku 应用程序上。

使用 Conda,您可以创建环境,这与 virtualenv 所做的非常相似。我的问题是:

如果我使用 Conda,它会取代对 virtualenv 的需求吗?如果没有,我如何将两者一起使用?我是在 Conda 中安装 virtualenv,还是在 virtualenv 中安装 Conda?我还需要使用 pip 吗?如果是这样,我仍然可以在隔离环境中使用 pip 安装软件包吗?

如果您对在 Heroku 上使用 conda 和 pip 感兴趣,请参阅 github.com/faph/conda-pip-buildpack
谢谢。我注意到 github 上有很多用于 Heroku 的 conda buildpacks。在决定使用哪个 buildpack 时,我应该考虑哪些因素?
请注意,如果您想安装不能直接从 Continuum 的服务器获得的软件包,您仍然需要使用 pip。
是的,我看到他们仍在 Django 1.8(不是 1.9)上。目前,我将在需要的地方(scipy 和 numpy)使用 conda,并在其他所有内容中使用 pip - 但仍在 conda 内。
我认为大多数 conda Heroku 构建包源自 Kenneth Reitz 的构建包。人们会根据自己的喜好调整它们。如果您需要的话,只需检查它们是否同时包含 conda 和 pip 支持。如果他们支持 environment.yml 文件。您总是可以快速浏览 buildpack 代码,看看您是否喜欢构建脚本,例如查看环境是如何创建的。

C
Community

Conda 取代了 virtualenv。在我看来,它更好。它不仅限于 Python,还可以用于其他语言。根据我的经验,它提供了更流畅的体验,尤其是对于科学包。我第一次在 Mac 上正确安装 MayaVi 是使用 conda。你仍然可以使用 pip。事实上,conda 在每个新环境中都会安装 pip。它知道 pip 安装的软件包。

例如:

conda list

列出当前环境中所有已安装的软件包。 Conda 安装的软件包显示如下:

sphinx_rtd_theme          0.1.7                    py35_0    defaults

并且通过 pip 安装的具有 <pip> 标记:

wxpython-common           3.0.0.0                   <pip>

在 Anaconda 环境中使用 pip 有什么负面影响吗?即使通过 Conda 提供了一个包,您是否也想使用 pip?
下划线或连字符是包名称的一部分。这与 pip 或 conda 无关。 <pip> 表明它是用 pip 安装的,否则它是用 conda 安装的。
“conda 知道 pip 安装的软件包”有一个很大的警告。据我了解,在 conda env 中,pip 独立运行,因此 conda 无法卸载 pip 安装的包
@clifgray - 具有本机共享库的 pip 和 conda 包可能会安装二进制不兼容的版本,这些版本将开始导致各种本机世界故障(sigsegv-s 等),对于不熟悉 C 调试器的人来说很难调试。仅 python 包也是如此,只是那些很容易理解。
您使用什么 conda 频道安装 Python 本身和其他软件包?我建议将 conda-forge 用于支持的所有内容,而将 pip 仅用于无法通过 conda 获得的内容。
j
juergi

简短的回答是,您只需要 conda。

Conda 有效地将 pip 和 virtualenv 的功能组合在一个包中,因此如果您使用 conda,则不需要 virtualenv。您会惊讶于 conda 支持的软件包数量。如果还不够,可以在conda下使用pip。

以下是比较 conda、pip 和 virtualenv 的 conda 页面的链接:

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands


P
Pat Niemeyer

我同时使用了两者,并且(截至 2020 年 1 月)它们有一些表面上的差异,这对我来说有不同的用途。默认情况下,Conda 更喜欢在中央位置为您管理环境列表,而 virtualenv 在当前目录中创建一个文件夹。如果您正在做机器学习并且只有几个广泛的环境可以在许多项目中使用并希望从任何地方跳入它们,那么前者(集中式)是有意义的。如果您正在执行具有完全不同的 lib 需求集且真正属于项目本身的小型一次性项目,则后者(每个项目文件夹)是有意义的。

Conda 创建的空环境大约为 122MB,而 virtualenv 大约为 12MB,因此这是您可能不希望将 Conda 环境分散在各处的另一个原因。

最后,Conda 更喜欢其集中式环境的另一个表面迹象是(同样,默认情况下)如果您确实在自己的项目文件夹中创建了一个 Conda 环境并激活它,那么出现在您的 shell 中的名称前缀是(太长)绝对文件夹的路径。你可以通过给它一个名字来解决这个问题,但 virtualenv 默认情况下会做正确的事情。

我希望随着这两个包管理器争夺主导地位,这些信息会迅速变得陈旧,但这些是今天的权衡:)

编辑:我在 2021 年 4 月再次审查了情况,情况没有改变。使用 conda 进行本地目录安装仍然很尴尬。


很好的解释!你在使用它们时有什么困难吗?你用过pipenv吗?
我已经在谷歌上搜索了很久,这就是我一直在寻找的答案!在遇到项目中二进制文件冲突的问题后,我从 pipenv 切换到 conda。我喜欢它来创建可以重用的大型“预设”环境,但对于一次性脚本或小型项目来说它似乎很重,我想念 pipenv 甚至可以在你 cd 进入目录时自动检测环境。
conda 的一个巨大优势与您在回答中所说的相反。 “您可能不希望将 Conda 环境分散在各处。” Conda 集中所有虚拟环境,pip 将它们分散到各处。可以覆盖 conda 的集中式管理器并将您的环境放在“Anaconda3/envs”以外的其他地方,但您必须明确说明这一点。
p
pylang

虚拟环境和pip

我要补充一点,Anaconda 的 creatingremoving conda 环境很简单。

> conda create --name <envname> python=<version> <optional dependencies>

> conda remove --name <envname> --all 

activated environment 中,通过 condapip 安装软件包:

(envname)> conda install <package>

(envname)> pip install <package>

这些环境与 conda's pip-like package management 紧密相关,因此创建环境和安装 Python 和非 Python 包都很简单。

木星

此外,环境中的 installing ipykernel 在 Jupyter 笔记本的内核下拉菜单中添加了一个新列表,将可重现的环境扩展到笔记本。从 Anaconda 4.1 开始,nbextensions were added,更容易向笔记本添加扩展。

可靠性

根据我的经验,conda 在安装大型库(例如 numpypandas)时更快、更可靠。此外,如果您希望转移您保存的环境状态,您可以通过 sharingcloning 一个 env 来实现。

比较

快速浏览每个工具的功能:

特性 virtualenv conda 全局 ny 本地 yn PyPI yy 通道 ny 锁定文件 nn 多 Python ny

描述

virtualenv 通常在每个项目的 .venv/ 文件夹中创建项目特定的本地环境。相比之下,conda 的环境是全局的并且保存在一个地方。

PyPI 通过 pip 与这两种工具一起工作,但 conda 可以添加额外的通道,有时可以更快地安装。

遗憾的是,两者都没有正式的锁定文件,因此这两种工具的复制环境都不是很稳定。但是,两者都有创建固定包文件的机制。

安装和运行 virtualenv 需要 Python,但 conda 已经随 Python 一起提供。 virtualenv 使用与它安装时相同的 Python 版本创建环境。 conda 允许您使用几乎任何 Python 版本创建环境。

也可以看看

virtualenvwrapper:全局虚拟环境

pyenv:管理python版本

曼巴:“更快”的康达

根据我的经验,conda 非常适合数据科学应用程序,并且可以作为一个很好的通用环境工具。然而,在软件开发中,使用 virtualenv 放入本地的、临时的、轻量级的环境中可能会很方便。


这是关于为什么将 conda 用于数据科学工作的虚拟环境的一个很好的总结。
S
SUB0DH

安装 Conda 将使您能够根据需要创建和删除 python 环境,从而为您提供与 virtualenv 相同的功能。

在这两个发行版的情况下,您将能够创建一个隔离的文件系统树,您可以在其中安装和删除 python 包(可能使用 pip)。如果您想为不同的用例使用不同版本的同一库,或者您只是想尝试一些分发并在之后删除它以节省磁盘空间,这可能会派上用场。

差异:

许可协议。虽然 virtualenv 属于最自由的 MIT license,但 Conda 使用 3 条款 BSD 许可证。

Conda 为您提供了自己的包控制系统。这个包控制系统通常提供流行的非 python 软件的预编译版本(对于大多数流行的系统),这可以很容易地让一些机器学习包工作。也就是说,您不必为您的系统编译优化的 C/C++ 代码。虽然这对我们大多数人来说是一种极大的解脱,但它可能会影响此类库的性能。

与 virtualenv 不同,Conda 至少在 Linux 系统上复制了一些系统库。此库可能会不同步,从而导致程序的行为不一致。

判决:

Conda 很棒,应该是您开始机器学习时的默认选择。它将为您节省一些时间来处理 gcc 和众多软件包。然而,Conda 并没有取代 virtualenv。它引入了一些可能并不总是需要的额外复杂性。它来自不同的许可证。您可能希望避免在分布式环境或 HPC 硬件上使用 conda。


介意详细说明为什么“您可能希望避免在分布式环境或 HPC 硬件上使用 conda”? @y.selivonchyk
我不同意其中一些结论。 “程序行为不一致”是未正确配置程序以使用 conda 安装的软件和库的结果。在 HPC 中,conda 在许多情况下更可取,事实上,HPC 管理员正在使用它来替换 module 系统之类的东西。它允许用户安装软件和更大的软件隔离,这是 HPC 的两个大问题。我遇到的唯一警告是,许多 HPC 文件系统对目录中的文件数量有硬性限制,而 conda 创建了许多 1,000 个文件。
您对 conda 处理流行的非 Python 软件 Python 软件包的 C/C++ 编译提出了一个很好的观点,这些 Python 软件包不附带 Python 包装器或它们自己的二进制文件。 AFAIK virtualenv 不这样做。但是,您关于“避免在分布式环境或 HPC 硬件上使用 conda”的结论是有缺陷的,并且没有事实支持。我同意 @user5359531 的结论,即您必须了解有关为复杂 HPC 系统配置和使用 conda 的更多信息。它可以解决比单独使用 virtualenv 更多的 HPC 问题。
M
Martijn Pieters

另一个新选项和我当前启动和运行环境的首选方法是 Pipenv

目前是 Python.org 官方推荐的 Python 打包工具


这提示“嗯?什么是 pipenv?”,这导致我进入 reddit.com/r/Python/comments/8jd6aq/…sedimental.org/the_packaging_gradient.html。我仍然不知道该使用什么,但至少我更了解情况。我认为。
看了介绍并快速阅读介绍后,pipenv 似乎无法管理 Python 版本...
@CarlesAlcolea pipenv 也可以通过以下方式指定各种版本:pipenv --two 用于 Python2 和 pipenv --three 用于 python3
conda 几乎总是一种更好的机器学习方法,应尽可能使用。在 conda 环境中使用 pip 然后反复使用 conda 混合安装包可能会出现问题。 pip 在将东西安装到 conda 环境后不会进行全环境完整性检查。它只检查自己的依赖关系,而不是环境中所有其他包的依赖关系。因此,最好先将所有 conda 格式的包安装到 conda 环境中,然后将 pip 包安装到“死胡同”那个新环境。 pip 不会更新 conda 的包索引。
“目前是 Python.org 官方推荐的 Python 打包工具” 信任,但要验证。您是否有指向此声明来源的链接?
S
Scarface97

1.不,如果您使用的是conda,则不需要使用任何其他工具来管理虚拟环境(例如venv、virtualenv、pipenv等)。也许有一些 conda 没有涵盖但 virtualenv (更重量级)可以涵盖的边缘情况,但到目前为止我还没有遇到过。

2.是的,你不仅仍然可以使用 pip,而且你可能不得不这样做。 conda 包存储库包含的内容少于 pip 的内容,因此 conda install 有时无法找到您要查找的包,如果它不是数据科学包则更是如此。而且,如果我没记错的话,conda 的存储库不会像 pip 那样快速/经常更新,所以如果你想使用最新版本的包,pip 可能再次成为你唯一的选择。

注意:如果 pip 命令在 conda 虚拟环境中不可用,您必须先安装它,方法是点击:

康达安装点子


M
MiloMinderbinder

毫无疑问,Conda 有更好的 API。但是,我想谈谈使用 conda 的负面影响,因为 conda 在其他答案中也有它的荣耀:

解决环境问题 - conda 环境后端的一大刺。作为补救措施,建议您不要使用 conda-forge 频道。但是,由于它是最流行的渠道,并且某些软件包(不仅是琐碎的,甚至像 pyspark 这样非常重要的软件包)仅在 conda-forge 上可用,因此您很快就会陷入困境。包装环境是个问题

还有其他已知问题。 virtualenv 是一段艰难的旅程,但很少会在路上一堵墙。另一方面,IMO 的 conda 偶尔会有这些硬墙,您只需要深呼吸并使用 virtualenv


n
nbro

是的,condavirtualenv 更容易安装,并且几乎取代了后者。


如果 Anaconda 替换它们,为什么它会提供安装虚拟环境的说明?
@jmh Anaconda 不会替换虚拟环境,它会用更通用的虚拟环境管理工具 conda 替换特定于 Python 的虚拟环境管理工具 virtualenv。此外,Anaconda 只是一个包含 Conda 工具的 Python+ 发行版;问题(和答案)仅与康达有关。
除了几年前的答案之外,这个答案并没有增加任何内容。
r
rohit arora

我在公司工作,在几个防火墙后面,我没有管理员权限

在我有限的 python 经验(2 年)中,我遇到了几个库(JayDeBeApi,sasl),当通过 pip 安装时抛出 C++ 依赖错误错误:需要 Microsoft Visual C++ 14.0。使用“Microsoft Visual C++ Build Tools”获取它:http://landinghub.visualstudio.com/visual-cpp-build-tools

这些在 conda 上安装得很好,因此从那时起我就开始使用 conda env。但是,要阻止 conda 在我没有写访问权限的 c.programfiles 中安装依赖项并不容易。