Conda是否取代了virtualenv的需求?

时间:2015-12-21 15:03:55

标签: python scipy virtualenv anaconda conda

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

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

  1. 如果我使用Conda,它会取代对​​virtualenv的需求吗?如果没有,我该如何将两者结合使用?我是在Conda中安装virtualenv,还是在virtualenv中安装Conda?
  2. 我还需要使用pip吗?如果是这样,我还能在隔离环境中安装带有pip的软件包吗?

9 个答案:

答案 0 :(得分:126)

  1. Conda取代了virtualenv。在我看来它更好。它不仅限于Python,也可以用于其他语言。根据我的经验,它提供了更加顺畅的体验,特别是对于科学包装。我第一次在Mac上正确安装MayaVi时使用conda

  2. 您仍然可以使用pip。实际上,conda会在每个新环境中安装pip。它知道pip安装的软件包。

  3. 例如:

    conda list
    

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

    sphinx_rtd_theme          0.1.7                    py35_0    defaults
    

    以及通过pip安装的内容如下:

    wxpython-common           3.0.0.0                   <pip>
    

答案 1 :(得分:44)

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

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

  2. 你会惊讶于conda支持多少个包。如果还不够,你可以在conda下使用pip。

  3. 这是conda页面的链接,比较conda,pip和virtualenv:

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

答案 2 :(得分:28)

虚拟环境和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包都很简单。

<强> Jupyter

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

<强>可靠性

根据我的经验,conda在安装numpypandas等大型库时更快,更可靠。此外,如果您希望转移保存的环境状态,可以通过sharingcloning环境转移。

答案 3 :(得分:16)

我同时使用和(截至2020年1月)它们之间存在一些肤浅的差异,因此对我来说它们具有不同的用法。默认情况下,Conda倾向于在中央位置为您管理一系列环境,而virtualenv在当前目录中创建一个文件夹。如果您是(例如)前者(集中式)很有意义做机器学习,只有几个广泛的环境,您可以在许多项目中使用它们,并希望从任何地方跳入这些环境。如果您正在做的一次性项目具有完全不同的lib需求集,而这些需求实际上更多地属于项目本身,那么后者(每个项目文件夹)就很有意义。

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

最后,表明Conda首选集中式env的另一个表面现象是(同样,默认情况下),如果您确实在自己的项目文件夹中创建了Conda env并激活它,则出现在外壳中的名称前缀也是(同样长)文件夹的绝对路径。您可以通过给它命名来解决该问题,但是virtualenv默认情况下会做正确的事情。

我希望随着两个程序包管理者争夺霸主地位,该信息会迅速过时,但这是今天的权衡:)

答案 4 :(得分:12)

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

如果是两个发行版,您将能够创建一个独立的文件系统树,您可以根据需要安装和删除python包(可能是pip)。如果您希望针对不同的用例使用相同库的不同版本,或者您只是想尝试一些分发并在保留磁盘空间后将其删除,那么这可能会派上用场。

差异:

许可协议。虽然virtualenv属于最自由的MIT licenseConda使用3条BSD许可。

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

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

判决:

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

答案 5 :(得分:6)

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

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

答案 6 :(得分:2)

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


2.是的,您不仅可以继续使用 pip,而且您可能必须这样做。 conda 包存储库包含的比 pip 少,因此 conda install 有时无法找到您要查找的包,如果它不是数据科学包,则更是如此。 而且,如果我没记错的话,conda 的存储库的更新速度/频率不如 pip,所以如果您想使用最新版本的软件包,pip 可能再次成为您唯一的选择。

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

conda 安装 pip

答案 7 :(得分:1)

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

答案 8 :(得分:1)

我在公司工作,在几台没有管理员权限的计算机的防火墙后面

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

这些与conda配合良好,因此从那以后我开始使用conda env。 但是要阻止conda在我没有写权限的c.programfiles内部安装依赖关系并不容易。