最近,我在安装SciPy时遇到了麻烦,特别是在我正在开发的Heroku应用程序上,我发现了Conda。
使用Conda可以创建环境,这与virtualenv的功能非常相似。我的问题是:
如果我使用Conda,它会取代对virtualenv的需求吗?如果不是,我如何将两者结合使用?我是在Conda中安装virtualenv,还是在virtualenv中安装Conda ? 我还需要使用pip吗?如果是这样,我还能在隔离的环境中安装带有pip的包吗?
最近,我在安装SciPy时遇到了麻烦,特别是在我正在开发的Heroku应用程序上,我发现了Conda。
使用Conda可以创建环境,这与virtualenv的功能非常相似。我的问题是:
如果我使用Conda,它会取代对virtualenv的需求吗?如果不是,我如何将两者结合使用?我是在Conda中安装virtualenv,还是在virtualenv中安装Conda ? 我还需要使用pip吗?如果是这样,我还能在隔离的环境中安装带有pip的包吗?
当前回答
1.不,如果你使用conda,你不需要使用任何其他工具来管理虚拟环境(如venv, virtualenv, pipenv等)。 也许有一些边缘情况conda没有覆盖,但virtualenv(更重量级)覆盖了,但到目前为止我还没有遇到过。
2.是的,您不仅仍然可以使用pip,而且可能不得不使用。conda包存储库包含的内容比pip的要少,所以conda install有时无法找到您正在寻找的包,如果它不是数据科学包,情况就更严重了。 而且,如果我没记错的话,conda的存储库更新速度和频率不如pip,所以如果您想使用软件包的最新版本,pip可能再次成为您的唯一选择。
注意:如果pip命令在conda虚拟环境中不可用,你必须先安装它,通过点击:
Conda安装PIP
其他回答
是的,conda比virtualenv更容易安装,并且基本上取代了后者。
毫无疑问,Conda拥有更好的API。但是,我想谈谈使用conda的缺点,因为conda在其他答案中也有它的荣耀:
解决环境问题——conda环境后面的一个大刺。作为补救措施,建议您不要使用conda-forge通道。但是,由于它是最流行的通道,而且一些包(不仅仅是微不足道的包,甚至是非常重要的包,如pyspark)在conda-forge上独家可用,你很快就会陷入困境。 包装环境是一个问题
还有其他已知的问题。Virtualenv是一个上坡路,但路上很少有墙。另一方面,conda,在我的印象中,偶尔有这些硬墙,你只需要深吸一口气,使用virtualenv
虚拟环境和pip
我要补充的是,使用Anaconda创建和删除conda环境非常简单。
> 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,从而更容易地向笔记本添加扩展。
可靠性
根据我的经验,在安装numpy和pandas等大型库时,conda更快、更可靠。此外,如果希望转移环境的保存状态,可以通过共享或克隆环境来实现。
比较
一个非详尽的,快速查看每个工具的功能:
Feature | virtualenv |
conda |
---|---|---|
Global | n | y |
Local | y | n |
PyPI | y | y |
Channels | n | y |
Lock File | n | n |
Multi-Python | n | y |
描述
virtualenv creates project-specific, local environments usually in a .venv/ folder per project. In contrast, conda's environments are global and saved in one place. PyPI works with both tools through pip, but conda can add additional channels, which can sometimes install faster. Sadly neither has an official lock file, so reproducing environments has not been solid with either tool. However, both have a mechanism to create a file of pinned packages. Python is needed to install and run virtualenv, but conda already ships with Python. virtualenv creates environments using the same Python version it was installed with. conda allows you to create environments with nearly any Python version.
另请参阅
Virtualenvwrapper:全局virtualenv Pyenv:管理python版本 曼巴:“更快”的康达
根据我的经验,conda非常适合数据科学应用程序,可以作为一个很好的通用环境工具。然而,在软件开发中,使用virtualenv在本地的、短暂的、轻量级的环境中放置可能会很方便。
简单地说,你只需要康达。
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。
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>