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
,因为conda
和pip
与这个主题有相似之处和不同之处。
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)