virtualenv和pyenv之间有什么关系?

tru*_*ess 161 python virtualenv virtualenvwrapper pyenv

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

Ste*_*nes 153

Pyenvvirtualenv是非常不同的工具,它们以不同的方式工作以执行不同的操作:

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

  • VirtualEnv,纯粹的python,所以无处不在,它可以复制一个特定版本的 python和pip本地激活环境,可能包含也可能不包含当前系统工具链的链接,如果没有,你可以仅将已知的库子集安装到该环境中.因此,对于测试和部署来说几乎肯定会好得多,因为您确切地知道哪些库使用了哪些版本,而全局更改不会影响您的模块.

venv python> 3.3

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

其他工具

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

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

  • 它可能值得一提的是pyenv-virtualenv,一个pyenv插件,允许pyenv和virtualenv一致无缝地工作.如果您已经使用pyenv-installer安装了pyenv,那么pyenv-virtualenv就已存在.*https://github.com/yyuu/pyenv-virtualenv*https://github.com/yyuu/pyenv-installer (3认同)
  • 现在在标准库中的 `venv` 怎么样? (2认同)
  • pyenv-virtualenv不是(或至少不再是)linux.有一个自制程序包,可以在MacOS上轻松安装. (2认同)
  • 最近几天,我们为 Windows 开发了 pyenv,名为 [pyenv-win](https://github.com/pyenv-win/pyenv-win)。看看是否有帮助 (2认同)

Bła*_*app 12

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

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

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

简而言之:

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