224

我是一名尝试学习 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 是做什么的?

您的示例解释将不胜感激。

4

2 回答 2

214

pip编辑:这里也值得一提,conda并且pip与这个主题有相似之处和不同之处。

pip:Python 包管理器。

  • 你可能会认为是ruby​​ 命令pip的 python 等价物gem
  • pip默认情况下不包含在 python 中。
  • 您可以使用homebrew安装 Python ,它将自动安装 pip:brew install python
  • OSX 的最终版本默认不包含 pip。要将 pip 添加到您的 mac 系统的 python 版本中,您可以sudo easy_install pip
  • 您可以使用PyPI查找和发布 Python 包:Python 包索引
  • requirements.txt 文件相当于 rubygemfile
  • 要创建需求文本文件,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,其中ENVis 是放置新虚拟环境的目录。
  • 要初始化virtualenv,您需要source ENV/bin/activate. 要停止使用,只需调用deactivate
  • 激活 后,您可以通过针对项目文件virtualenv运行来安装工作区的所有包要求。pip install -rrequirements.txt

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>
  • 作为一名网络开发人员,我没有使用过 Anaconda。大约 3GB,包括所有软件包。
  • 有一个精简miniconda版,这似乎是一个比使用更简单的选择pip+ virtualenv,虽然我没有个人使用它的经验。
  • 虽然conda允许您安装包,但这些包与 PyPI 包是分开的,因此您可能仍需要额外使用 pip,具体取决于您需要安装的包的类型。

也可以看看:

于 2016-10-08T02:22:57.550 回答
9

简单的类比:

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

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

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

于 2020-06-01T12:18:19.567 回答