ChatGPT解决这个技术问题 Extra ChatGPT

pyenv、virtualenv、anaconda 有什么区别?

我是一名尝试学习 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 是做什么的?

您的示例解释将不胜感激。


G
Gh0sT

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

pip:Python 包管理器。

您可能会认为 pip 是 ruby gem 命令的 python 等价物

默认情况下,pip 不包含在 python 中。

您可以使用 homebrew 安装 Python,它将自动安装 pip: brew install python

OSX 的最终版本默认不包含 pip。要将 pip 添加到您的 mac 系统的 python 版本,您可以 sudo easy_install pip

您可以使用 PyPI 查找和发布 Python 包:Python 包索引

requirements.txt 文件相当于 ruby gemfile

要创建需求文本文件,请 pip freeze > requirements.txt

注意,此时,我们已经在我们的系统上安装了 python,并且我们创建了一个 requirements.txt 文件,其中概述了您系统上已安装的所有 python 包。

pyenv:Python 版本管理器

来自文档:pyenv 让您可以轻松地在多个 Python 版本之间切换。它简单、不显眼,并且遵循 UNIX 的传统,即做好一件事的单一用途工具。这个项目是从 rbenv 和 ruby-build 派生出来的,并针对 Python 进行了修改。

许多人对使用 python3 犹豫不决。

如果您需要使用不同版本的 python,pyenv 可以让您轻松管理。

virtualenv:Python 环境管理器。

来自文档:正在解决的基本问题是依赖项和版本之一,以及间接权限。想象一下,您有一个应用程序需要 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:包管理器 + 环境管理器 + 其他科学图书馆。

来自文档:Anaconda 4.2.0 包括一个简单的 Python 安装(2.7.12、3.4.5 和/或 3.5.2)以及超过 100 个预构建和测试的科学和分析 Python 包的更新,包括 NumPy、Pandas 、SciPy、Matplotlib 和 IPython,通过简单的 conda install 提供超过 620 个包

作为一名网络开发人员,我没有使用过 Anaconda。大约 3GB,包括所有软件包。

有一个精简的 miniconda 版本,这似乎是一个比使用 pip + virtualenv 更简单的选择,尽管我个人没有使用它的经验。

虽然 conda 允许您安装包,但这些包与 PyPI 包是分开的,因此您可能仍需要额外使用 pip,具体取决于您需要安装的包的类型。

也可以看看:

conda vs pip vs virtualenv(anaconda文档中的部分)

pip 和 conda 的区别(stackoverflow)

virtualenv 和 pyenv 的关系(stackoverflow)


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

简单的类比:

pyenv ~ rbenv

点子〜捆绑器

虚拟环境 ~ rvm 中的 gemset。这可以由 bundler 直接管理,无需 gemset。

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

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


pipenv 类似于 bundler。点到宝石。
J
Jorge Tovar

简单解释:https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands

如果您过去使用过 pip 和 virtualenv,则可以使用 conda 执行所有相同的操作。

Pip 是一个包管理器

virtualenv 是一个环境管理器

康达既是