最近,我在安装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

其他回答

另一个新的选择,也是我目前最喜欢的启动和运行环境的方法是Pipenv

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

I use both and (as of Jan, 2020) they have some superficial differences that lend themselves to different usages for me. By default Conda prefers to manage a list of environments for you in a central location, whereas virtualenv makes a folder in the current directory. The former (centralized) makes sense if you are e.g. doing machine learning and just have a couple of broad environments that you use across many projects and want to jump into them from anywhere. The latter (per project folder) makes sense if you are doing little one-off projects that have completely different sets of lib requirements that really belong more to the project itself.

Conda创建的空环境大约是122MB,而virtualenv的大约是12MB,所以这是另一个你可能不喜欢到处散布Conda环境的原因。

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

我预计随着两个包管理器争夺主导地位,这些信息将很快变得陈旧,但这些是今天的权衡:)

编辑:我在2021年4月再次审查了情况,情况没有变化。使用conda安装本地目录仍然很尴尬。

安装Conda将使您能够按照您的意愿创建和删除python环境,从而为您提供与virtualenv相同的功能。

在这两种发行版的情况下,您可以创建一个隔离的文件系统树,在那里您可以按照自己的意愿安装和删除python包(可能是使用pip)。如果您想为不同的用例使用相同库的不同版本,或者您只是想尝试一些发行版,然后在节省磁盘空间后删除它,那么这可能会派上用场。

差异:

许可协议。虽然virtualenv使用的是最自由的MIT许可证,但Conda使用的是3条款BSD许可证。

Conda为您提供了自己的包控制系统。这个包控制系统通常提供流行的非python软件的预编译版本(对于大多数流行的系统),这可以很容易地让一些机器学习包工作。也就是说,你不需要为你的系统编译优化的C/ c++代码。虽然这对我们大多数人来说是一种解脱,但它可能会影响此类库的性能。

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

结论:

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

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


2.是的,您不仅仍然可以使用pip,而且可能不得不使用。conda包存储库包含的内容比pip的要少,所以conda install有时无法找到您正在寻找的包,如果它不是数据科学包,情况就更严重了。 而且,如果我没记错的话,conda的存储库更新速度和频率不如pip,所以如果您想使用软件包的最新版本,pip可能再次成为您的唯一选择。

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

Conda安装PIP

毫无疑问,Conda拥有更好的API。但是,我想谈谈使用conda的缺点,因为conda在其他答案中也有它的荣耀:

解决环境问题——conda环境后面的一个大刺。作为补救措施,建议您不要使用conda-forge通道。但是,由于它是最流行的通道,而且一些包(不仅仅是微不足道的包,甚至是非常重要的包,如pyspark)在conda-forge上独家可用,你很快就会陷入困境。 包装环境是一个问题

还有其他已知的问题。Virtualenv是一个上坡路,但路上很少有墙。另一方面,conda,在我的印象中,偶尔有这些硬墙,你只需要深吸一口气,使用virtualenv