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

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

使用Conda创建环境,非常类似于virtualenv所做的。我的问题是:

  1. 如果我使用Conda,它会取代对virtualenv的需求吗?如果不是,我如何将两者结合使用?我是在Conda中安装virtualenv,还是在virtualenv中安装Conda ?
  2. 我还需要使用pip吗?如果是这样,我还能在隔离的环境中安装带有pip的包吗?
130428 次浏览
  1. Conda取代virtualenv。在我看来,这样更好。它不局限于Python,也可以用于其他语言。根据我的经验,它提供了更流畅的体验,特别是对于科学软件包。我第一次在Mac上正确安装MayaVi是用conda

  2. 你仍然可以使用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>

简单地说,你只需要康达。

  1. Conda在一个包中有效地结合了pip和virtualenv的功能,因此如果使用Conda,则不需要virtualenv。

  2. conda支持的软件包数量之多,你会感到惊讶。如果还不够,可以在conda下使用pip。

这里是conda, pip和virtualenv对比页面的链接:

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

虚拟环境和pip

我将添加创建删除 conda环境在Anaconda中是简单的。

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


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

激活环境中,通过condapip安装包:

(envname)> conda install <package>


(envname)> pip install <package>

这些环境与Conda的类似pip的包管理紧密相关,因此创建环境并安装Python和非Python包很简单。


Jupyter

此外,环境中的安装ipykernel在Jupyter笔记本的Kernels下拉菜单中添加了一个新列表,将可复制环境扩展到笔记本。从Anaconda 4.1, 添加了Nbextensions开始,可以更容易地向笔记本添加扩展。

可靠性

根据我的经验,在安装诸如numpypandas这样的大型库时,conda更快、更可靠。此外,如果你想转移你保存的环境状态,你可以通过分享克隆 an env。


比较

一个非详尽的,快速查看每个工具的功能:

< span style=" font - family:宋体;"> < / th >特性 < span style=" font - family:宋体;"> virtualenv < / th > < span style=" font - family:宋体;"> conda < / th > < span style=" font - family:宋体;"全球< / td > > < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"道明> > y < / < span style=" font - family:宋体;"当地> < / td > < span style=" font - family:宋体;"道明> > y < / < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"> PyPI td > < / < span style=" font - family:宋体;"道明> > y < / < span style=" font - family:宋体;"道明> > y < / < span style=" font - family:宋体;"道明> >频道< / < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"道明> > y < / < span style=" font - family:宋体;"道明> >锁文件< / < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"> Multi-Python td > < / < span style=" font - family:宋体;"道明> n > < / < span style=" font - family:宋体;"道明> > y < /

描述

  • virtualenv通常在每个项目的.venv/文件夹中创建特定于项目的本地环境。相比之下,conda的环境是全局的,并且保存在一个地方。
  • PyPI通过pip与这两个工具一起工作,但conda可以添加额外的通道,这有时可以更快地安装。
  • 遗憾的是,这两种工具都没有正式的锁文件,所以使用这两种工具都不能很好地再现环境。但是,两者都有一种机制来创建固定包的文件。
  • 安装和运行virtualenv需要Python,但conda已经随Python一起发布。virtualenv使用与安装时相同的Python版本创建环境。conda允许你创建几乎任何Python版本的环境。

另请参阅

根据我的经验,conda很适合数据科学应用,并作为一个良好的通用环境工具。然而,在软件开发中,使用virtualenv放置在本地的、短暂的、轻量级的环境中可能会很方便。

是的,condavirtualenv更容易安装,并且基本上取代了后者。

安装Conda将使您能够按照您的意愿创建和删除python环境,因此为您提供与virtualenv相同的功能。

在这两种发行版的情况下,您可以创建一个隔离的文件系统树,在那里您可以按照自己的意愿安装和删除python包(可能是使用pip)。如果您想为不同的用例使用相同库的不同版本,或者您只是想尝试一些发行版,然后在节省磁盘空间后删除它,那么这可能会派上用场。

差异:

许可协议。虽然virtualenv属于最自由的麻省理工学院的许可,但Conda使用3子句BSD许可。

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

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

结论:

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

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

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

我两者都使用(截至2020年1月),它们有一些表面上的差异,对我来说有不同的用法。通过默认的, Conda倾向于在一个中心位置为你管理一个环境列表,而virtualenv在当前目录中创建一个文件夹。如果你正在做机器学习,并且有几个用于多个项目的广泛环境,并且想从任何地方跳入其中,那么前者(集中式)是有意义的。后者(每个项目文件夹)是有意义的,如果你正在做一个小的一次性项目,有完全不同的库需求集,真正属于项目本身。

Conda创建的空环境大约是122MB,而virtualenv的大约是12MB,所以这是另一个你可能不喜欢到处散布Conda环境的原因。

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

我预计随着两个包管理器争夺主导地位,这些信息将很快变得陈旧,但这些是今天的权衡:)

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

我在公司工作,在几道防火墙后面的机器上,我没有管理权限

在我有限的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中安装依赖并不容易,因为我没有写权限

< p > 1。不,如果你使用conda,你不需要使用任何其他工具来管理虚拟环境(如venv, virtualenv, pipenv等)。 也许有一些conda没有涵盖的边缘情况,但virtualenv(更重量级)可以,但到目前为止我还没有遇到过
< p > 2。是的,您不仅仍然可以使用pip,而且可能不得不使用。conda包存储库包含的内容比pip的要少,所以conda安装有时无法找到你正在寻找的包,如果它不是一个数据科学包,情况会更严重。 而且,如果我没记错的话,conda的存储库更新速度和频率不如pip,所以如果你想使用最新版本的包,pip可能再次成为你唯一的选择

注意:如果皮普命令在conda虚拟环境中不可用,你必须先安装它,通过点击:

Conda安装PIP

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

  1. 解决环境问题- conda环境的一个大刺。作为补救措施,建议不要使用conda-forge通道。但是,由于它是最流行的通道,而且一些包(不仅仅是微不足道的包,甚至是非常重要的包,如pyspark)在conda-forge上独家可用,你很快就会陷入绝境。

  2. < p > 包装环境是一个问题

还有其他已知的问题。Virtualenv是一个上坡路,但路上很少有墙。另一方面,conda,在我的印象中,偶尔有这些硬墙,你只需要深吸一口气,使用virtualenv