pyenv、virtualenv和anaconda之间有什么区别?

261

我是一名使用 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 是做什么用的?

请您给出解释并提供实例,谢谢。


虚拟环境(virtualenv)和 Pyenv 之间的关系是什么? - cel
请查看此问题:virtualenv和pyenv之间的关系 - reza.bm
3个回答

251

编辑:值得一提的是,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:Python软件包索引查找和发布Python软件包。
  • requirements.txt文件类似于ruby的gemfile
  • 要创建一个requirements文本文件,请使用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:软件包管理器+Python版本管理器+环境管理器+其他科学库。

  • **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>进行安装。
  • 作为一名Web开发人员,我没有使用过Anaconda。它包含所有软件包,大小约为3GB。
  • 有一个精简版的miniconda版本,似乎比使用pip+virtualenv更简单,尽管我个人没有使用过它。
  • 虽然conda允许您安装软件包,但这些软件包与PyPI软件包是分开的,因此根据您需要安装的软件包类型,您可能仍需要使用pip进行安装。

另请参阅:


9
可能需要进行更新,参考链接:https://dev59.com/sFsW5IYBdhLWcg3w-bH_#49084152。 - matt wilkie
23
这个内容是否可以更新,以包括pipenv,因为它似乎是Python.org目前官方推荐的Python打包工具? - Wavesailor
1
安装仅3GB的库有什么问题吗?您不想部署所有这些库,但仅仅因为您安装了3GB的库并不意味着您需要部署所有内容。而且这在今天来说只是一点点硬盘空间。我目前使用Anaconda安装,并使用venv管理我的环境,但我正在考虑是否也要在我的虚拟环境中使用conda(我认为我不会 - venv对我来说更流畅)。 - David
@Aditya 我认为我更喜欢使用venv,因为它使用较少的全局结构和更多的本地文件夹结构,此外,在其他来源中venv的参考频率更高。我喜欢下载conda发行版,因为它预装了许多我使用的库。 - David
1
@Aditya,你说得很对。我以前用venv很舒适,这也是主要原因。但是现在我已经转向使用conda来管理我的软件包,并且我喜欢它。 - David
显示剩余3条评论

10

简单类比:

  • pyenv ~ rbenv (Python版本管理工具 ~ Ruby版本管理工具)
  • pip ~ bundler (Python包管理器 ~ Ruby依赖管理器)
  • virtual env ~ gemset in rvm. This can be managed by bundler directly without gemset. (Python虚拟环境 ~ Ruby使用rvm管理的gemset。这可以直接由bundler管理而无需gemset)

由于我使用的是Python3,我更喜欢Python3内置的虚拟环境工具venvvenv 简单易用,我建议您阅读官方文档,该文档简短明了。

在Ruby中,我们不需要虚拟环境,因为bundler会负责此项任务。虚拟环境和bundler都很棒,但是它们使用不同的解决方案来解决相同的问题。


2
pipenv 类似于 bundler,就像 pip 对应 gem 一样。 - danilo

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接