pyenv, virtualenv, anaconda有什么区别?

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

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

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

我的问题是:

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

请举例说明,我将不胜感激。

125861 次浏览

编辑:这里也值得一提的是pip,因为__ABC1和pip有与本主题相关的相似点和不同点

pip: Python包管理器。

  • 你可能会认为pip在python中相当于ruby的gem命令
  • pip默认不包含在python中。
  • 你可以使用家酿安装Python,它会自动安装pip: brew install python
  • OSX的最终版本默认不包括pip。要将pip添加到mac系统的python版本,可以sudo easy_install pip
  • 你可以使用PyPI: Python包索引找到并发布python包
  • requirements.txt文件类似于ruby gemfile .txt文件
  • 要创建一个需求文本文件,pip freeze > requirements.txt
  • 注意,在这一点上,我们已经在系统上安装了python,并且我们已经创建了一个requirements.txt文件,该文件概述了系统上已经安装的所有python包。

pyenv: Python版本管理器

  • 来自文档: pyenv允许您轻松地在多个Python版本之间切换。它简单、不引人注目,并且遵循UNIX传统,即只做一件事的单一用途工具。这个项目是从rbenv和ruby-build中派生出来的,并针对Python进行了修改。
  • 很多人都喜欢。
  • 如果你需要使用不同版本的python, pyenv可以让你轻松管理。

virtualenv: Python环境管理器。

  • 来自文档: 要解决的基本问题是依赖关系和版本,以及间接的权限。假设有一个应用程序需要LibFoo版本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是Python的商业发行版,包含最流行的Python库你不允许在超过200名员工的组织中使用Anaconda
  • 来自文档: Anaconda 4.2.0包括一个简单的Python安装(2.7.12,3.4.5和/或3.5.2)和更新超过100个预构建和测试的科学和分析Python包,包括NumPy, Pandas, SciPy, Matplotlib和IPython,还有超过620个包通过简单的conda install <packagename>可用
  • 作为一名网页开发人员,我没有使用过Anaconda。包括所有的包,大约3GB。
  • 有一个精简的miniconda版本,这似乎是一个比使用pip + virtualenv更简单的选择,尽管我个人没有使用它的经验。
  • 虽然conda允许你安装包,但这些包与PyPI包是分开的,所以你可能仍然需要根据你需要安装的包的类型额外使用pip。

参见:

简单的类比:

  • Pyenv ~ rbenv
  • PIP ~捆扎机
  • rvm中的虚拟环境。这可以由捆扎机直接管理,无需镶嵌。

因为我使用python3,所以我更喜欢名为venv的python3内置虚拟环境。venv简单易用。我建议你看一下官方文件。这份文件短小精悍。

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

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

如果你在过去使用过皮普virtualenv,你可以使用conda来执行所有相同的操作。

  • Pip是一个包管理器
  • Virtualenv是一个环境管理器
  • Conda两者都有