Conda是否取代了virtualenv的需求?

Joh*_*han 184 python virtualenv scipy anaconda conda

我最近发现康达我是有安装SciPy的麻烦后,确切的说是我开发一个应用程序的Heroku.

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

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

Mik*_*ler 142

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

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

例如:

conda list
Run Code Online (Sandbox Code Playgroud)

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

sphinx_rtd_theme          0.1.7                    py35_0    defaults
Run Code Online (Sandbox Code Playgroud)

和通过pip这样安装的那些:

wxpython-common           3.0.0.0                   <pip>
Run Code Online (Sandbox Code Playgroud)

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

Mad*_*ist 55

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

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

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

这是conda页面的链接,比较conda,pip和virtualenv:https://conda.io/docs/commands.html#conda-vs-pip-vs-virtualenv-commands .


Pat*_*yer 34

我同时使用和(截至 2020 年 1 月)它们有一些表面差异,这对我来说有不同的用途。通过默认康达更喜欢在一个中央位置来管理你的环境的列表,而使得的virtualenv在当前目录中的文件夹。如果您正在进行机器学习,并且只有几个广泛的环境可以在许多项目中使用并且想要从任何地方跳入它们,则前者(集中式)是有意义的。如果您正在执行具有完全不同的库需求集的小型一次性项目,而这些库需求实际上更多地属于项目本身,则后者(每个项目文件夹)是有意义的。

Conda 创建的空环境大约为 122MB,而 virtualenv 大约为 12MB,因此这是您可能不想将 Conda 环境分散到任何地方的另一个原因。

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

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

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


pyl*_*ang 31

虚拟环境和 pip

我将补充说,使用Anaconda 创建删除 conda环境很简单.

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

> conda remove --name <envname> --all 
Run Code Online (Sandbox Code Playgroud)

激活的环境中,通过conda或安装软件包pip:

(envname)> conda install <package>

(envname)> pip install <package>
Run Code Online (Sandbox Code Playgroud)

这些环境与conda的pip类软件包管理密切相关,因此创建环境并安装Python和非Python软件包都很简单.


Jupyter

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

可靠性

根据我的经验,畅达是在安装大型资料库,如更快,更可靠numpypandas.此外,如果您希望转移保存的环境状态,可以通过共享克隆环境来实现.


y.s*_*hyk 16

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

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

区别:

许可协议.虽然virtualenv属于最自由的麻省理工学院许可,但康达使用3条BSD许可.

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

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

判决:

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

  • 介意详细说明一下为什么“您可能希望避免在分布式环境或 HPC 硬件上使用 conda”?@y.selivonchyk (3认同)
  • 我不同意其中一些结论。“不一致的程序行为”是由于未正确配置程序以使用“conda”安装的软件和库而导致的。在 HPC 中,“conda”在许多情况下更可取,事实上 HPC 管理员正在使用它来替换“模块”系统等内容。它允许用户安装软件和更好的软件隔离,这是 HPC 上的两个大问题。我遇到的唯一警告是,许多 HPC 文件系统对目录中的文件数量有硬性限制,而 conda 会创建数千个文件。 (2认同)

Joh*_*han 7

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

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

  • 这提示“呃?pipenv 是什么?”,这让我访问了 https://www.reddit.com/r/Python/comments/8jd6aq/why_is_pipenv_the_recommended_pa​​ckaging_tool_by/ 和 https://sedimental.org/the_packaging_gradient.html。我仍然不知道该使用什么,但至少我更了解了。我认为。 (3认同)
  • conda 几乎总是一种更好的机器学习方法,应该尽可能使用。在 conda 环境中重复使用 pip 和 conda 混合安装包可能会出现问题。pip 在将东西安装到 conda 环境中后不会进行完整环境完整性检查。它只检查自己的依赖关系,而不检查环境中其他每个包的依赖关系。因此,最好先将所有 conda 格式的包安装到 conda 环境中,然后再将 pip 包安装到该新环境的“死胡同”中。pip 不会更新 conda 的包索引。 (2认同)
  • “它是目前Python.org官方推荐的Python打包工具” 信任,但要验证。您有此声明来源的链接吗? (2认同)

fig*_*uts 7

毫无疑问,Conda 有更好的 API。但是,我想谈谈使用 conda 的缺点,因为 conda 在其余答案中占有一席之地:

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

  2. 包装环境是个问题

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


小智 5

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


2.是的,您不仅仍然可以使用 pip,而且可能必须使用。conda 软件包存储库包含的内容少于 pip 的内容,因此conda install有时无法找到您正在查找的软件包,如果它不是数据科学软件包,则更是如此。而且,如果我没记错的话,conda 的存储库更新速度不如 pip 的那么快/频繁,所以如果你想使用最新版本的包,pip 可能再次成为你唯一的选择。

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

conda 安装 pip