最近,我在安装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的包吗?
当前回答
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>
其他回答
另一个新的选择,也是我目前最喜欢的启动和运行环境的方法是Pipenv
它目前是Python.org官方推荐的Python打包工具
是的,conda比virtualenv更容易安装,并且基本上取代了后者。
安装Conda将使您能够按照您的意愿创建和删除python环境,从而为您提供与virtualenv相同的功能。
在这两种发行版的情况下,您可以创建一个隔离的文件系统树,在那里您可以按照自己的意愿安装和删除python包(可能是使用pip)。如果您想为不同的用例使用相同库的不同版本,或者您只是想尝试一些发行版,然后在节省磁盘空间后删除它,那么这可能会派上用场。
差异:
许可协议。虽然virtualenv使用的是最自由的MIT许可证,但Conda使用的是3条款BSD许可证。
Conda为您提供了自己的包控制系统。这个包控制系统通常提供流行的非python软件的预编译版本(对于大多数流行的系统),这可以很容易地让一些机器学习包工作。也就是说,你不需要为你的系统编译优化的C/ c++代码。虽然这对我们大多数人来说是一种解脱,但它可能会影响此类库的性能。
与virtualenv不同,Conda至少在Linux系统上复制了一些系统库。这些库可能会不同步,导致程序的行为不一致。
结论:
Conda很棒,应该是您开始学习机器学习时的默认选择。这将为您节省一些处理gcc和大量包的时间。然而,Conda并不能取代virtualenv。它引入了一些可能并不总是需要的额外复杂性。它有不同的许可。您可能希望避免在分布式环境或HPC硬件上使用conda。
简单地说,你只需要康达。
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拥有更好的API。但是,我想谈谈使用conda的缺点,因为conda在其他答案中也有它的荣耀:
解决环境问题——conda环境后面的一个大刺。作为补救措施,建议您不要使用conda-forge通道。但是,由于它是最流行的通道,而且一些包(不仅仅是微不足道的包,甚至是非常重要的包,如pyspark)在conda-forge上独家可用,你很快就会陷入困境。 包装环境是一个问题
还有其他已知的问题。Virtualenv是一个上坡路,但路上很少有墙。另一方面,conda,在我的印象中,偶尔有这些硬墙,你只需要深吸一口气,使用virtualenv