pyenv、virtualenv、anaconda 有啥区别?

Posted

技术标签:

【中文标题】pyenv、virtualenv、anaconda 有啥区别?【英文标题】:What is the difference between pyenv, virtualenv, anaconda?pyenv、virtualenv、anaconda 有什么区别? 【发布时间】:2016-11-08 02:58:07 【问题描述】:

我是一名尝试学习 python 的 ruby​​ 程序员。我对 pyenv 非常熟悉,因为它就像来自 rbenv 的复制和粘贴。 Pyenv 有助于允许在系统中拥有多个版本的 python,并且还可以在不触及系统敏感部分的情况下隔离 python。

我想每个 python 安装都带有 pip 包。我仍然不明白的是,有很多好的 python 库建议使用这个 virtualenv 和 anaconda。我什至可以为 pyenv 找到一个 virtualenv 插件。

现在我对这两个 pyenv 和 virtualenv 的用途感到困惑。 更糟糕的是,pyenv 内部还有一个 virtualenv 插件。

我的问题是:

pyenv 和 virtualenv 有什么区别? 在 pyenv 和 virtualenv 中使用 pip 命令有什么不同吗? 这个 pyenv virutalenv 有什么作用?

我们将非常感谢您的示例解释。

【问题讨论】:

相关:***.com/questions/29950300/… 看到这个问题:relationship between virtualenv and pyenv 【参考方案1】:

编辑:这里也值得一提的是pip,因为condapip 与这个主题有相似之处和不同之处

pip:Python 包管理器。

您可能会将pip 视为python 中的ruby gem 命令的等效项 pip 默认不包含在 python 中。 您可以使用homebrew 安装Python,它会自动安装pip:brew install python OSX 的最终版本默认不包含 pip。要将 pip 添加到您的 mac 系统的 python 版本中,您可以sudo easy_install pip 您可以使用PyPI: The Python Package Index 查找和发布python 包 requirements.txt 文件相当于 ruby​​ gemfile 要创建需求文本文件,pip freeze > requirements.txt 注意,此时,我们已经在系统上安装了 python,并且我们创建了一个 requirements.txt 文件,其中概述了您系统上已安装的所有 python 包。

pyenv:Python 版本管理器

From the docs:pyenv 让您可以轻松地在 Python 的多个版本之间切换。它简单、不显眼,并且遵循 UNIX 的传统,即做好一件事的单一用途工具。该项目是从 rbenv 和 ruby​​-build 派生出来的,并针对 Python 进行了修改。 很多人hesitate to use python3。 如果您需要使用不同版本的 python,pyenv 让您轻松管理。

virtualenv:Python 环境管理器。

From the docs:正在解决的基本问题是依赖关系和版本之一,以及间接权限。想象一下,您有一个应用程序需要 LibFoo 版本 1,但另一个应用程序需要版本 2。您如何同时使用这两个应用程序?如果您将所有内容都安装到 /usr/lib/python2.7/site-packages(或任何您平台的标准位置),很容易导致您无意中升级不应升级的应用程序。时间> 要创建virtualenv,只需调用virtualenv ENV,其中ENV 是放置新虚拟环境的目录。 要初始化virtualenv,你需要source ENV/bin/activate。要停止使用,只需致电deactivate。 激活virtualenv 后,您可以通过对项目的requirements.txt 文件运行pip install -r 来安装工作区的所有包要求。

Anaconda:包管理器 + 环境管理器 + 其他科学图书馆。

From the docs:Anaconda 4.2.0 包括一个简单的 Python 安装(2.7.12、3.4.5 和/或 3.5.2)以及超过 100 个预构建和测试的科学和分析 Python 包的更新,其中包括NumPy、Pandas、SciPy、Matplotlib 和 IPython,通过简单的conda install <packagename> 提供超过 620 个包 作为一名网络开发人员,我没有使用过 Anaconda。包括所有软件包在内大约为 3GB。 有一个精简的miniconda 版本,这似乎是一个比使用pip + virtualenv 更简单的选择,虽然我没有个人使用它的经验。 虽然conda 允许您安装包,但这些包与 PyPI 包是分开的,因此您可能仍需要额外使用 pip,具体取决于您需要安装的包类型。

另见:

conda vs pip vs virtualenv(anaconda 文档中的部分) the difference between pip and conda(堆栈溢出) the relationship between virtualenv and pyenv(堆栈溢出)

【讨论】:

这可能现在使用刷新,c.f. ***.com/a/49084152/14420 能否将其更新为包含pipenv,因为它目前似乎是 Python.org 官方推荐的 Python 打包工具? 仅安装 3GB 的库有什么问题?您不想部署所有这些库,但仅仅因为您安装了 3GB 的库并不意味着您需要部署所有这些库。这些天来,这只是一小部分硬盘空间。我目前使用 anaconda 安装,他们使用 venv 管理我的环境,但我正在考虑是否也将 conda 用于我的虚拟环境(我不认为我会 - venv 对我来说似乎是一个更顺畅的工作流程)。 @David 我有点晚了,但你能扩展一下 venv 对我来说似乎是一个更顺畅的工作流程 @Aditya 你有一个很好的观点。我对 venv 很满意,这是主要原因。但我后来改用 conda 来管理我的包,我喜欢它。【参考方案2】:

简单的类比:

pyenv ~ rbenv pip ~ 捆绑器 虚拟环境 ~ rvm 中的 gemset。这可以由捆绑器直接管理,无需 gemset。

由于我使用python3,我更喜欢名为venv的python3内置虚拟环境。 venv 简单易用。我建议你阅读它的官方文档。文档短小精悍。

在 ruby​​ 中,我们并不真正需要虚拟环境,因为捆绑器会处理它。 virtual env 和 bundler 都很棒,但是它们有不同的解决方案来解决相同的问题。

【讨论】:

pipenv 类似于 bundler。点到宝石。

以上是关于pyenv、virtualenv、anaconda 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python 多版本切换工具- Pyenv/Virtualenv 及 Anaconda 科学计算环境的配置

python多版本和虚拟环境(pyenv+conda or virtualenv)

python pyenv与 pyenv-virtualenv配置

virtualenv和pyenv是啥关系?

Anaconda使用

markdown pyenv + pyenv-virtualenv