我是一名尝试学习 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 是做什么的?
您的示例解释将不胜感激。
编辑:这里也值得一提的是 pip
,因为 conda
和 pip
在与此主题相关的方面有相似之处和不同之处。
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
作为一名网络开发人员,我没有使用过 Anaconda。大约 3GB,包括所有软件包。
有一个精简的 miniconda 版本,这似乎是一个比使用 pip + virtualenv 更简单的选择,尽管我个人没有使用它的经验。
虽然 conda 允许您安装包,但这些包与 PyPI 包是分开的,因此您可能仍需要额外使用 pip,具体取决于您需要安装的包的类型。
也可以看看:
conda vs pip vs virtualenv(anaconda文档中的部分)
pip 和 conda 的区别(stackoverflow)
virtualenv 和 pyenv 的关系(stackoverflow)
简单的类比:
pyenv ~ rbenv
点子〜捆绑器
虚拟环境 ~ rvm 中的 gemset。这可以由 bundler 直接管理,无需 gemset。
由于我使用 python3,我更喜欢名为 venv 的 python3 内置虚拟环境。 venv 简单易用。我建议你阅读它的官方文档。该文档简短而简洁。
在 ruby 中,我们并不真正需要虚拟环境,因为捆绑器会处理它。虚拟环境和捆绑器都很棒,但是,它们有不同的解决方案来解决相同的问题。
简单解释:https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands
如果您过去使用过 pip 和 virtualenv,则可以使用 conda 执行所有相同的操作。
Pip 是一个包管理器
virtualenv 是一个环境管理器
康达既是