virtualenv和pyenv之间有什么关系?

时间:2015-04-29 17:13:23

标签: python virtualenv virtualenvwrapper pyenv

我最近学会了如何在我的工作流程中使用virtualenv和virtualenvwrapper,但我在一些指南中看到了pyenv,但我似乎无法理解pyenv是什么以及它是如何不同的/类似于virtualenv。 pyenv是virtualenv或免费工具的更好/更新的替代品吗?如果后者有什么不同的做法,那么两者(以及virtualenvwrapper,如果适用)如何协同工作?

2 个答案:

答案 0 :(得分:144)

Pyenv virtualenv 是非常不同的工具,可以通过不同方式执行不同的操作:

  • Pyenv 是一个bash扩展 - 在Windows上不起作用 - 拦截你对python,pip等的调用,将它们引导到几个系统python工具之一 - 链。因此,您始终可以在所选的python版本中安装所有已安装的库 - 因此对于必须在不同版本的python之间切换的用户来说是好的。

  • VirtualEnv ,是纯python,所以无处不在,它可以复制,可选的特定版本, python和pip本地激活环境可能包含也可能不包含指向当前系统工具链的链接,如果不包含,则只能在该环境中安装已知的库子集。因此,对于测试和部署来说几乎肯定会好得多,因为您知道完全哪些库使用哪个版本,全局更改不会影响您的模块。

venv python> 3.3

请注意,从Python 3.3开始,有一个名为venv的VirtualEnv的内置实现(在某些安装中,有一个名为pyvenv的包装器 - 这个包装器是deprecated in Python 3.6),应该可以优先使用它。为了避免包装器可能出现问题,通常可以使用/path/to/python3 -m venv desired/env/path直接使用它,或者在py的窗口上使用优秀的py -3 -m venv desired/env/path python选择器。它将创建使用desired/env/path configure指定的目录并正确填充它。一般来说,它非常像使用VirtualEnv。

其他工具

有许多工具值得一提,并考虑到,因为它们可以帮助使用上述一个或多个:

  • VirtualEnvWrapper管理和简化VirtualEnv的使用和管理 - 跨平台
  • pyenv-virtualenv,由pyenv-installer 安装的,它提供了用于管理和连接VirtualEnv的PyEnv工具 - 您可以使用此基本安装包含多个版本的python并在每个环境中创建隔离的环境 - Linux / OS-X 由Johann Visagie推荐
  • PyInstaller可以使用你的python代码,可能是开发的&在VirtualEnv下进行测试,并将其捆绑,以便它可以运行一个没有安装你的 python版本的平台 - 请注意,它不是一个交叉编译器,你需要一个Windows(虚拟)机器构建Windows安装等,但它可以很方便,即使你可以确定将安装python但不能确定python的版本和所有库将与你的代码兼容。

答案 1 :(得分:11)

virtualenv允许您创建自定义Python安装,例如在项目的子目录中。因此,您的每个项目都可以在各自的virtualenv下拥有自己的python(甚至几个)。对于某些/所有虚拟媒体而言,即使拥有相同版本的python(例如2.7.16)而没有冲突也是完全正常的 - 他们分开居住并且彼此不了解。如果你想使用python中的任何一个,你必须activate它(通过运行一个脚本,它会暂时修改你的PATH以确保那个virtualenv' s {{ 1}}目录首先出现)。从那时起,调用bin/(或python等)会调用virtualenv的版本,直到你pip(恢复deactivate)。

PATH的运行范围比pyenv更广泛 - 它包含Python安装的注册表(可用于安装新的安装),并允许您配置在运行时运行的Python版本使用virtualenv命令。听起来相似但实际使用有点不同。它的工作原理是将其垫片python脚本添加到python(永久),然后决定哪个"真实" PATH要调用。你甚至可以配置pyenv调用你的一个virtualenv pythons(使用python插件)。使用pyenv-virtualenv安装的Python版本会进入其pyenv目录(默认情况下,pyenv root是〜/ .pyenv),因此更多全局'比virtualenv。通常,您无法复制通过$(pyenv root)/versions/安装的Python版本,至少这样做不是主要想法。

要创建具有特定Python版本的virtualenv,您需要在系统中的某个位置拥有该版本(无论它是否在pyenv上),并且基本上将其克隆到新创建的virtualenv中。当然,获取特定版本的一种方法是通过PATH安装它。完成后,各个虚拟虚拟机可以通过安装不同的模块(或其版本)而自由发散。

简而言之:

  • pyenv允许您创建本地的独立python 通过现有克隆进行安装
  • virtualenv允许你这样做 同时安装不同版本的python(或者 系统范围或只为本地用户)然后选择其中的哪一个 在任何给定时间运行的众多蟒蛇(包括那些 由virtualenv或Anaconda创建)