PyCharm 虚拟环境和 Anaconda 环境有什么区别?

What is the difference between PyCharm Virtual Environment and Anaconda Environment?

当我在 PyCharm 中创建一个新项目时,它会创建一个新的虚拟环境。我读到当我执行 Python 脚本时,它们是在这个环境中而不是系统环境中使用解释器执行的。所以,如果我需要安装一些包,我可以只在这个环境中安装它们,而不是在系统环境中安装它们。太棒了。

我还阅读了有关 Anaconda 环境的内容。当我创建一个新的 Anaconda 环境时,它会创建一个与系统环境不同的新环境。对于我的项目,我可以使用这个环境,只在此处安装所需的包,而不在主系统环境中安装。

现在,我的问题是 PyCharm 创建的虚拟环境和 Anaconda 创建的环境有什么区别? PyCharm 创建的虚拟环境大约为 15-20MB,而 Anaconda 为 90MB。所以,一定是有区别的。另外,我读到我可以配置我的 PyCharm 来使用 Anaconda 环境解释器。

那么,PyCharm和Anaconda创建的环境有什么不同呢?

两种环境都基于python的virtualenv,您可以独立使用它们并根据需要在其中配置(或安装)包,而无需担心冲突。这就是 virtualenv 的本质。

Anaconda 是一个 python 发行版(就像 linux 发行版一样),它默认根据开发人员的需求添加其他包。因此,安装比安装普通香草 python 更大。这也是它的虚拟环境相当大的原因。

Pycharm是一个IDE,正好支持python的virtualenv特性。因此,如果您愿意,它可以为您创建它。它可以使用普通的 python 发行版来创建它,因此它的大小比使用像 Anaconda 这样的发行版要小,正如您已经注意到的那样。

大小问题不是 Anaconda 特有的,如果您列出 anaconda conda list 为您安装的所有软件包并在 "lightweight" virtualenv 中手动安装它,您会看到大小也会增加.我相信你明白我的意思。

我必须澄清一下 anaconda 只是一个集合。真正的环境管理员是condaHereminiconda。它只包含管理环境的必要部分,而不是完整的 anaconda 集合。

conda 不仅仅是一个简单的 Python 包管理器,而是一个系统范围的包管理器。它将帮助您轻松安装软件包。一个典型的例子是在 Windows 上安装 numpy。没有conda,这真的很困难,因为它需要一个很难获得的特定C编译器。但是对于 conda,您可以只用一个命令 conda install numpy 安装 numpy。它会自动解决编译器问题和C依赖。


所以回到你的问题,当你在Pycharm中创建一个环境时,它会问你要创建哪个环境:Virtualenv EnvironmentConda EnvironmentPipenv Environment。我一般选择Pipenv Environment,因为这个env会绑定到当前项目,可以生成锁文件。

在这种情况下,我想你现在可以理解了:没有名为 "created by PyCharm" 或 "Anaconda" 的环境。只有名为 "created by Virtualenv, Conda or Pipenv" 的环境。 Pycharm 只是使用并包装其中之一。


那么 Conda EnvironmentVirtualenv Environment 有什么区别(Pipenv Environment 本质上是一个 Virtualenv Environment 和复杂的 pip)?不同之处在于他们的目的不同。

Conda Environment 通常用于 "Python user"。他们使用 Python 作为工具来做一些其他工作,例如网络爬虫、数据挖掘和图像处理。他们对 Python 了解不多(因为他们不需要知道),所以 conda 尽可能自动。他们的任务可以在计算机的任何地方,因此 conda 创建的环境位于用户范围的目录中。他们有时需要不同的 Python 版本,这可以在 conda 中完成,但不能在 virtualenv.

中完成

Virtualenv Environment 通常用于 "Python developer"。他们使用 Python 来构建应用程序或包。 Virtualenv 创建的环境通常位于当前项目的目录中。因此,您可以为每个应用程序创建一个环境并轻松管理依赖项。

总结一下:

Conda Environment:

  1. 不仅管理 Python 包,还管理不同的 Python 版本和系统范围的依赖项。
  2. 环境位于用户范围的目录中。
  3. 更少的环境

Virtualenv Environment:

  1. 管理 Python 包。主要目的是为每个应用程序分离依赖关系。
  2. 环境通常位于项目范围的目录中。 (虽然 pipenv 默认情况下在用户范围的目录中创建环境,但许多人认为在项目目录中应该是默认的。)
  3. 更多环境。(每个应用程序的新环境)

对我来说,两者都用。我使用 conda 来管理不同的 Python 版本,并使用 pipenv 来管理我的应用程序的依赖项。