繁体   English   中英

pyenv、virtualenv、anaconda有什么区别?

[英]What is the difference between pyenv, virtualenv, anaconda?

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

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

现在我对这两个 pyenv 和 virtualenv 的目的感到困惑。 更糟糕的是,在 pyenv 中有一个 virtualenv 插件。

我的问题是:

  • pyenv 和 virtualenv 有什么区别?
  • 在 pyenv 和 virtualenv 中使用 pip 命令有什么区别吗?
  • 这个 pyenv virutalenv 是做什么的?

非常感谢您的示例解释。

编辑:这里也值得一提pip ,因为condapip有与此主题相关的异同

pip:Python 包管理器。

  • 你可能会认为pip相当于 python 的 ruby gem命令
  • 默认情况下,python 不包含pip
  • 你可以使用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 环境管理器。

  • 来自文档正在解决的基本问题是依赖项和版本之一,以及间接权限。 假设您有一个应用程序需要版本 1 的 LibFoo,但另一个应用程序需要版本 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 <packagename>可提供 620 多个包
  • 作为 Web 开发人员,我没有使用过 Anaconda。 包括所有软件包在内大约有 3GB。
  • 有一个精简的miniconda版本,虽然我个人没有使用它的经验,但它似乎比使用pip + virtualenv更简单。
  • 虽然conda允许您安装软件包,但这些软件包与 PyPI 软件包是分开的,因此您可能仍需要额外使用 pip,具体取决于您需要安装的软件包类型。

另见:

简单的比喻:

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

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

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

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

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

  • Pip 是 package 经理
  • virtualenv 是一个环境管理器
  • 康达是两者

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM