我最近发现Conda在我安装SciPy时遇到了麻烦,特别是在我正在开发的Heroku应用程序上。
使用Conda创建环境,非常类似于virtualenv所做的。我的问题是:
Conda取代virtualenv。在我看来,这样更好。它不局限于Python,也可以用于其他语言。根据我的经验,它提供了更流畅的体验,特别是对于科学软件包。我第一次在Mac上正确安装MayaVi是用conda。
conda
你仍然可以使用pip。事实上,conda会在每个新环境中安装pip。它知道pip安装包。
pip
例如:
conda list
列出当前环境中所有已安装的包。 conda安装的包显示如下:
sphinx_rtd_theme 0.1.7 py35_0 defaults
而通过pip安装的则有<pip>标记:
<pip>
wxpython-common 3.0.0.0 <pip>
简单地说,你只需要康达。
Conda在一个包中有效地结合了pip和virtualenv的功能,因此如果使用Conda,则不需要virtualenv。
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
在激活环境中,通过conda或pip安装包:
(envname)> conda install <package> (envname)> pip install <package>
这些环境与Conda的类似pip的包管理紧密相关,因此创建环境并安装Python和非Python包很简单。
Jupyter
此外,环境中的安装ipykernel在Jupyter笔记本的Kernels下拉菜单中添加了一个新列表,将可复制环境扩展到笔记本。从Anaconda 4.1, 添加了Nbextensions开始,可以更容易地向笔记本添加扩展。
ipykernel
可靠性
根据我的经验,在安装诸如numpy和pandas这样的大型库时,conda更快、更可靠。此外,如果你想转移你保存的环境状态,你可以通过分享或克隆 an env。
numpy
pandas
比较
一个非详尽的,快速查看每个工具的功能:
virtualenv
描述
.venv/
另请参阅
virtualenvwrapper
pyenv
mamba
根据我的经验,conda很适合数据科学应用,并作为一个良好的通用环境工具。然而,在软件开发中,使用virtualenv放置在本地的、短暂的、轻量级的环境中可能会很方便。
是的,conda比virtualenv更容易安装,并且基本上取代了后者。
安装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安装本地目录仍然很尴尬。
我在公司工作,在几道防火墙后面的机器上,我没有管理权限
这些安装与conda很好,因此,从那些天我开始使用conda env工作。 然而,阻止conda在c.programfiles中安装依赖并不容易,因为我没有写权限
注意:如果皮普命令在conda虚拟环境中不可用,你必须先安装它,通过点击:
Conda安装PIP
毫无疑问,Conda拥有更好的API。但是,我想谈谈使用conda的缺点,因为conda在其他答案中也有它的荣耀:
解决环境问题- conda环境的一个大刺。作为补救措施,建议不要使用conda-forge通道。但是,由于它是最流行的通道,而且一些包(不仅仅是微不足道的包,甚至是非常重要的包,如pyspark)在conda-forge上独家可用,你很快就会陷入绝境。
conda-forge
还有其他已知的问题。Virtualenv是一个上坡路,但路上很少有墙。另一方面,conda,在我的印象中,偶尔有这些硬墙,你只需要深吸一口气,使用virtualenv